ytdl-org/youtube-dl · error · ExtractorError
No media entries found
Error message
No media entries found
What it means
Raised by BRIE._extract_media (the Bayerischer Rundfunk extractor) after parsing the media XML: it iterated the XML but the medias list is empty — no media nodes matched — so nothing can be returned. A len>1 case only logs a warning asking for a bug report; len==0 is a hard failure. It means the XML document lacked parseable media entries (not merely formats), e.g. the asset list was empty or the node names changed.
Source
Thrown at youtube_dl/extractor/br.py:121
'formats': self._extract_formats(xpath_element(
xml_media, 'assets'), media_id),
'thumbnails': self._extract_thumbnails(xpath_element(
xml_media, 'teaserImage/variants'), base_url),
'description': xpath_text(xml_media, 'desc'),
'webpage_url': xpath_text(xml_media, 'permalink'),
'uploader': xpath_text(xml_media, 'author'),
}
broadcast_date = xpath_text(xml_media, 'broadcastDate')
if broadcast_date:
media['upload_date'] = ''.join(reversed(broadcast_date.split('.')))
medias.append(media)
if len(medias) > 1:
self._downloader.report_warning(
'found multiple medias; please '
'report this with the video URL to http://yt-dl.org/bug')
if not medias:
raise ExtractorError('No media entries found')
return medias[0]
def _extract_formats(self, assets, media_id):
formats = []
for asset in assets.findall('asset'):
format_url = xpath_text(asset, ['downloadUrl', 'url'])
asset_type = asset.get('type')
if asset_type.startswith('HDS'):
formats.extend(self._extract_f4m_formats(
format_url + '?hdcore=3.2.0', media_id, f4m_id='hds', fatal=False))
elif asset_type.startswith('HLS'):
formats.extend(self._extract_m3u8_formats(
format_url, media_id, 'mp4', 'm3u8_native', m3u8_id='hds', fatal=False))
else:
format_info = {
'ext': xpath_text(asset, 'mediaType'),
'width': int_or_none(xpath_text(asset, 'frameWidth')),
'height': int_or_none(xpath_text(asset, 'frameHeight')),View on GitHub (pinned to 956b8c5855)
Solutions
- Open the BR page in a browser and confirm the item is still playable; expired items legitimately produce empty media lists.
- If it plays, fetch the media XML URL manually and inspect the node names; if renamed, update the collection logic feeding the medias list (br.py:121).
- Check the extracted id — a mis-parsed id yields a valid-but-empty XML document.
- For batch jobs, treat this as expected for archived items and skip.
Defensive patterns
Strategy: try-catch
Try / catch
try:
ydl.extract_info(br_url)
except ExtractorError as e:
if str(e) == 'No media entries found':
mark_expired(br_url) # empty media XML: expired or schema change; don't retry immediately
else:
raise Prevention
- Confirm the broadcast still plays in a browser before investigating extractor bugs.
- Prune expired broadcasts from crawl queues; BR media windows close over time.
- If playable items consistently fail here, suspect XML node renames and check the raw media XML.
When it happens
Trigger: Extracting a BR URL whose media XML (the per-media document the extractor fetches) contains no media nodes: expired/removed broadcasts, ids whose XML returns an empty container, or a schema change renaming the media node so findall-based collection yields nothing.
Common situations: Deep links to broadcasts past their availability; BR reworking their XML API node names; batch jobs over archive pages where many entries have no media; proxy/middleware mangling the XML into an empty document.
Related errors
- The page doesn't contain any tracks
- %s returned error: %s
- Episode %s is not yet available
- Episode %s is no longer available
- Episode %s is not currently available
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/e0ee4032a25597f6.
Report an issue: GitHub.