ytdl-org/youtube-dl · error · ExtractorError

Video %s does not exist

Error message

Video %s does not exist

What it means

Raised after parsing AfreecaTV's video XML when the last ./track/video element is missing or its text is empty. The metadata API answered, but contains no playable video node, so the extractor declares the video nonexistent. Marked expected=True.

Source

Thrown at youtube_dl/extractor/afreecatv.py:277

            if flag == 'PARTIAL_ADULT':
                self._downloader.report_warning(
                    'In accordance with local laws and regulations, underage users are restricted from watching adult content. '
                    'Only content suitable for all ages will be downloaded. '
                    'Provide account credentials if you wish to download restricted content.')
                partial_view = True
                continue
            elif flag == 'ADULT':
                error = 'Only users older than 19 are able to watch this video. Provide account credentials to download this content.'
            else:
                error = flag
            raise ExtractorError(
                '%s said: %s' % (self.IE_NAME, error), expected=True)
        else:
            raise ExtractorError('Unable to download video info')

        video_element = video_xml.findall(compat_xpath('./track/video'))[-1]
        if video_element is None or video_element.text is None:
            raise ExtractorError(
                'Video %s does not exist' % video_id, expected=True)

        video_url = video_element.text.strip()

        title = xpath_text(video_xml, './track/title', 'title', fatal=True)

        uploader = xpath_text(video_xml, './track/nickname', 'uploader')
        uploader_id = xpath_text(video_xml, './track/bj_id', 'uploader id')
        duration = int_or_none(xpath_text(
            video_xml, './track/duration', 'duration'))
        thumbnail = xpath_text(video_xml, './track/titleImage', 'thumbnail')

        common_entry = {
            'uploader': uploader,
            'uploader_id': uploader_id,
            'thumbnail': thumbnail,
        }

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Verify the video still plays in a browser at the same URL
  2. If expired, no client fix exists — the media node is genuinely absent
  3. Try the alternate URL forms (title number vs station number) for the same broadcast
Defensive patterns

Strategy: try-catch

Try / catch

try:
    ydl.extract_info(url)
except ExtractorError as e:
    if 'does not exist' in str(e):
        mark_url_dead(url)  # track XML has no video node; permanent

Prevention

When it happens

Trigger: video_xml.findall('./track/video') returns elements whose .text is None (or the final element is empty); replay expired so track XML retains metadata but no video file; multi-file track where the last entry is a placeholder.

Common situations: Expired replays that still serve a station page; audio-only or reserved tracks the API lists without media; deleted-in-progress replays.

Related errors


AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14). Data as JSON: /api/errors/248f20a5c6441748. Report an issue: GitHub.