ytdl-org/youtube-dl · error · ExtractorError
video not found
Error message
video not found
What it means
Raised by the RTL2 (Germany) extractor after AES-CBC decrypting the 'streamUrl' from the stream API: if the decrypted plaintext contains the literal b'rtl2_you_video_not_found', the backend is signaling the video does not exist. Expected=True.
Source
Thrown at youtube_dl/extractor/rtl2.py:151
'only_matching': True,
}]
_AES_KEY = b'\xe9W\xe4.<*\xb8\x1a\xd2\xb6\x92\xf3C\xd3\xefL\x1b\x03*\xbbbH\xc0\x03\xffo\xc2\xf2(\xaa\xaa!'
_GEO_COUNTRIES = ['DE']
def _real_extract(self, url):
video_id = self._match_id(url)
stream_data = self._download_json(
self._BACKWERK_BASE_URL + 'stream/video/' + video_id, video_id)
data, iv = compat_b64decode(stream_data['streamUrl']).decode().split(':')
stream_url = intlist_to_bytes(aes_cbc_decrypt(
bytes_to_intlist(compat_b64decode(data)),
bytes_to_intlist(self._AES_KEY),
bytes_to_intlist(compat_b64decode(iv))
))
if b'rtl2_you_video_not_found' in stream_url:
raise ExtractorError('video not found', expected=True)
formats = self._extract_m3u8_formats(
stream_url[:-compat_ord(stream_url[-1])].decode(),
video_id, 'mp4', 'm3u8_native')
self._sort_formats(formats)
video_data = self._download_json(
self._BACKWERK_BASE_URL + 'video/' + video_id, video_id)
series = video_data.get('formatTitle')
title = episode = video_data.get('title') or series
if series and series != title:
title = '%s - %s' % (series, title)
return {
'id': video_id,
'title': title,
'formats': formats,View on GitHub (pinned to 956b8c5855)
Solutions
- Verify the video on rtl2.de in a browser - most likely it was deleted.
- If it plays in a browser, the encrypted marker changed or the AES key rotated - update youtube-dl (the extractor's _AES_KEY would need updating).
- Remove the dead id from your queue.
Defensive patterns
Strategy: try-catch
Try / catch
try:
ydl.extract_info(url)
except ExtractorError as e:
if e.args and 'video not found' in str(e):
mark_deleted(video_id) # RTL2 signaled absence via encrypted payload
else:
raise Prevention
- Treat this as authoritative deletion - do not retry.
- Validate RTL2 ids against the site before queueing.
- If the video plays in a browser, suspect a stale _AES_KEY and update youtube-dl instead.
When it happens
Trigger: Extracting any rtl2.de video id for which the BACKWERK stream API returns a streamUrl that decrypts to the 'rtl2_you_video_not_found' placeholder instead of a real HLS URL.
Common situations: User-uploaded ('you') videos deleted by their owner or moderated away; typo'd video ids; old links after RTL2 purged user content.
Related errors
- %s said: %s
- Unable to login: %s
- lynda returned error: %s
- Course %s does not exist
- That clip does not exist.
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/8a942e9fc0fe7eba.
Report an issue: GitHub.