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
- Verify the video still plays in a browser at the same URL
- If expired, no client fix exists — the media node is genuinely absent
- 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
- Verify replay availability in a browser before bulk-queuing old AfreecaTV broadcasts
- Download replays within their retention window; expired tracks return metadata without media
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
- Video %s has been deleted
- Unable to download video info
- Video %s is no longer available
- Video %s is not available
- Show not found in A&E feed (too new?)
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/248f20a5c6441748.
Report an issue: GitHub.