ytdl-org/youtube-dl · error · ExtractorError
%s said: %s
Error message
%s said: %s
What it means
Raised by the RTBF (Belgian broadcaster) auvio extractor when the JSON embedded in the embed page's data-media attribute contains a non-empty 'error' key. The message is 'RTBF said: <error text as returned by the site>'. Expected=True - the site itself reported the failure.
Source
Thrown at youtube_dl/extractor/rtbf.py:80
'VIMEO': 'Vimeo',
}
_QUALITIES = [
('mobile', 'SD'),
('web', 'MD'),
('high', 'HD'),
]
def _real_extract(self, url):
live, media_id = re.match(self._VALID_URL, url).groups()
embed_page = self._download_webpage(
'https://www.rtbf.be/auvio/embed/' + ('direct' if live else 'media'),
media_id, query={'id': media_id})
data = self._parse_json(self._html_search_regex(
r'data-media="([^"]+)"', embed_page, 'media data'), media_id)
error = data.get('error')
if error:
raise ExtractorError('%s said: %s' % (self.IE_NAME, error), expected=True)
provider = data.get('provider')
if provider in self._PROVIDERS:
return self.url_result(data['url'], self._PROVIDERS[provider])
title = data['title']
is_live = data.get('isLive')
if is_live:
title = self._live_title(title)
height_re = r'-(\d+)p\.'
formats = []
m3u8_url = data.get('urlHlsAes128') or data.get('urlHls')
if m3u8_url:
formats.extend(self._extract_m3u8_formats(
m3u8_url, media_id, 'mp4', m3u8_id='hls', fatal=False))
fix_url = lambda x: x.replace('//rtbf-vod.', '//rtbf.') if '/geo/drm/' in x else xView on GitHub (pinned to 956b8c5855)
Solutions
- Read the interpolated error text from RTBF - it names the exact cause (geo-block, removed, etc.).
- If geo-blocked, no client-side fix exists beyond accessing it from an allowed region.
- Verify the media id / URL is still valid on rtbf.be.
- If the page plays fine in a browser, the data-media JSON moved - update youtube-dl.
Defensive patterns
Strategy: try-catch
Try / catch
try:
ydl.extract_info(url)
except ExtractorError as e:
if str(e).startswith('RTBF said:'):
log_site_error(url, str(e)) # message names geo-block/expired/invalid
else:
raise Prevention
- Log the site-provided text verbatim - it distinguishes geo-blocks from dead ids.
- For live streams (direct/ URLs), extract during broadcast windows only.
- Remember no credential or retry fixes a geo-block.
When it happens
Trigger: Extracting any rtbf.be/auvio/(media|direct)/<id> URL whose embed endpoint returns JSON with an 'error' field: geo-blocked content, removed media, expired live streams, or invalid ids.
Common situations: Requesting RTBF content from outside Belgium (geo-restriction), catching a live stream after it ended, or following dead links.
Related errors
- %s returned error: %s - %s
- %s said: %s
- This video is not available from your country.
- %s said: video is not available
- %s: No songs found, try using proxy
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/77731f8fa0826de5.
Report an issue: GitHub.