ytdl-org/youtube-dl · error · ExtractorError

Unable to download video info

Error message

Unable to download video info

What it means

Raised when AfreecaTV's two-pass view-info loop completes both iterations without break — i.e. neither a usable flag path nor success was reached. The for/else construct makes this a generic 'could not obtain video info' failure after exhausting retries (including the PARTIAL_ADULT retry).

Source

Thrown at youtube_dl/extractor/afreecatv.py:273

            flag = xpath_text(video_xml, './track/flag', 'flag', default=None)
            if flag and flag == 'SUCCEED':
                break
            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,

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Retry the command after a short delay — this path usually indicates a transient server condition
  2. If extracting a just-started live stream, wait until the stream metadata is published
  3. If persistent, capture the view-info URL response manually and inspect why it produces neither flag nor break
  4. Check upstream yt-dlp for extractor fixes if AfreecaTV changed the info API
Defensive patterns

Strategy: retry

Try / catch

try:
    ydl.extract_info(url)
except ExtractorError as e:
    if str(e) == 'Unable to download video info':
        retry_with_backoff(url, max_attempts=3)  # transient server condition
    else:
        raise

Prevention

When it happens

Trigger: Two consecutive requests to the station view-info URL return responses that neither break the loop nor raise a flag error; PARTIAL_ADULT retry also fails; transient server error pages parsed as XML without flags.

Common situations: AfreecaTV server-side hiccups; live broadcasts whose view info is not yet published; partially broken XML responses on very new videos.

Related errors


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