{"record":{"id":"e0ee4032a25597f6","repo":"ytdl-org/youtube-dl","slug":"no-media-entries-found","errorCode":null,"errorMessage":"No media entries found","messagePattern":"No media entries found","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/br.py","lineNumber":121,"sourceCode":"                'formats': self._extract_formats(xpath_element(\n                    xml_media, 'assets'), media_id),\n                'thumbnails': self._extract_thumbnails(xpath_element(\n                    xml_media, 'teaserImage/variants'), base_url),\n                'description': xpath_text(xml_media, 'desc'),\n                'webpage_url': xpath_text(xml_media, 'permalink'),\n                'uploader': xpath_text(xml_media, 'author'),\n            }\n            broadcast_date = xpath_text(xml_media, 'broadcastDate')\n            if broadcast_date:\n                media['upload_date'] = ''.join(reversed(broadcast_date.split('.')))\n            medias.append(media)\n\n        if len(medias) > 1:\n            self._downloader.report_warning(\n                'found multiple medias; please '\n                'report this with the video URL to http://yt-dl.org/bug')\n        if not medias:\n            raise ExtractorError('No media entries found')\n        return medias[0]\n\n    def _extract_formats(self, assets, media_id):\n        formats = []\n        for asset in assets.findall('asset'):\n            format_url = xpath_text(asset, ['downloadUrl', 'url'])\n            asset_type = asset.get('type')\n            if asset_type.startswith('HDS'):\n                formats.extend(self._extract_f4m_formats(\n                    format_url + '?hdcore=3.2.0', media_id, f4m_id='hds', fatal=False))\n            elif asset_type.startswith('HLS'):\n                formats.extend(self._extract_m3u8_formats(\n                    format_url, media_id, 'mp4', 'm3u8_native', m3u8_id='hds', fatal=False))\n            else:\n                format_info = {\n                    'ext': xpath_text(asset, 'mediaType'),\n                    'width': int_or_none(xpath_text(asset, 'frameWidth')),\n                    'height': int_or_none(xpath_text(asset, 'frameHeight')),","sourceCodeStart":103,"sourceCodeEnd":139,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/br.py#L103-L139","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    ydl.extract_info(br_url)\nexcept ExtractorError as e:\n    if str(e) == 'No media entries found':\n        mark_expired(br_url)  # empty media XML: expired or schema change; don't retry immediately\n    else:\n        raise","preventionTips":["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."],"tags":["br","bayerischer-rundfunk","xml-parsing","empty-result","availability"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}