yt-dlp/yt-dlp · error · ExtractorError
The VOD does not exist
Error message
The VOD does not exist
What it means
Soop/AfreecaTV VOD extractor checks the info API's code field; -6221 means the VOD (replay) does not exist -- deleted by the broadcaster, or the title/file number in the URL is invalid. Raised expected=True, so it is reported as a normal unavailability, not a bug.
Source
Thrown at yt_dlp/extractor/afreecatv.py:183
def _real_extract(self, url):
video_id = self._match_id(url)
data = self._call_api(
'station/video/a/view', video_id, headers={'Referer': url},
data=urlencode_postdata({
'nTitleNo': video_id,
'nApiLevel': 10,
}))['data']
initial_refresh_time = 0
strm_id = None
# For subscriber-only VODs, we need to call private_auth.php to get CloudFront cookies
needs_private_auth = traverse_obj(data, ('sub_upload_type', {str}))
if needs_private_auth:
strm_id = traverse_obj(data, ('bj_id', {str}, {require('stream ID')}))
error_code = traverse_obj(data, ('code', {int}))
if error_code == -6221:
raise ExtractorError('The VOD does not exist', expected=True)
elif error_code == -6205:
raise ExtractorError('This VOD is private', expected=True)
common_info = traverse_obj(data, {
'title': ('title', {str}),
'uploader': ('writer_nick', {str}),
'uploader_id': ('bj_id', {str}),
'duration': ('total_file_duration', {int_or_none(scale=1000)}),
'thumbnails': ('thumb', {self._fixup_thumb}),
})
entries = []
for file_num, file_element in enumerate(
traverse_obj(data, ('files', lambda _, v: url_or_none(v['file']))), start=1):
file_url = file_element['file']
if determine_ext(file_url) == 'm3u8':
if needs_private_auth:
self._request_webpage(View on GitHub (pinned to 81ecd58b13)
Solutions
- Open the URL in a browser to confirm the VOD is gone
- Browse the uploader's VOD list on sooplive to find a re-upload or the correct id
- Drop the dead link from your queue
Defensive patterns
Strategy: try-catch
Try / catch
from yt_dlp import YoutubeDL
from yt_dlp.utils import DownloadError
try:
info = YoutubeDL().extract_info(url)
except DownloadError as e:
if 'The VOD does not exist' in str(e):
mark_deleted(url) # prune dead link, do not retry
else:
raise Prevention
- Validate vod.sooplive.com links in a browser before batch-queuing
- Expect broadcasters to delete replays; make deletion a normal path in download queues
When it happens
Trigger: Extracting a vod.sooplive.com/player/<nno> URL whose numeric id was deleted, mistyped, or never existed; the API returns data with code == -6221.
Common situations: Broadcasters delete replays regularly; stale links from forums/search results; hand-edited numeric ids.
Related errors
- This VOD is private
- Unable to login: {self.IE_NAME} said: {error}
- The channel is not currently live
- Unable to extract broadcast number
- This livestream is protected by a password, use the --video-
AI-assisted analysis of yt-dlp/yt-dlp@81ecd58b13 (2026-08-22).
Data as JSON: /api/errors/47b5005e2fcc2f3f.
Report an issue: GitHub.