ytdl-org/youtube-dl · error · ExtractorError
no video with IDEC available
Error message
no video with IDEC available
What it means
Raised by CeskaTelevizeIE after downloading the iFramePlayer.php page: if the response contains 'Neplatný parametr pro videopřehrávač' (invalid player parameter) or 'IDEC nebyl nalezen' (IDEC not found), the IDEC is not playable, so extraction fails with this expected error, tagging video_id=idec.
Source
Thrown at youtube_dl/extractor/ceskatelevize.py:144
if not idec:
idec = traverse_obj(next_data, ('props', 'pageProps', 'data', 'videobonusDetail', 'bonusId'), get_all=False)
if idec:
type_ = 'bonus'
if not idec:
raise ExtractorError('Failed to find IDEC id')
iframe_hash = self._download_webpage(
'https://www.ceskatelevize.cz/v-api/iframe-hash/',
playlist_id, note='Getting IFRAME hash')
query = {'hash': iframe_hash, 'origin': 'iVysilani', 'autoStart': 'true', type_: idec, }
webpage = self._download_webpage(
'https://www.ceskatelevize.cz/ivysilani/embed/iFramePlayer.php',
playlist_id, note='Downloading player', query=query)
NOT_AVAILABLE_STRING = 'This content is not available at your territory due to limited copyright.'
if '%s</p>' % NOT_AVAILABLE_STRING in webpage:
self.raise_geo_restricted(NOT_AVAILABLE_STRING)
if any(not_found in webpage for not_found in ('Neplatný parametr pro videopřehrávač', 'IDEC nebyl nalezen', )):
raise ExtractorError('no video with IDEC available', video_id=idec, expected=True)
type_ = None
episode_id = None
playlist = self._parse_json(
self._search_regex(
r'getPlaylistUrl\(\[({.+?})\]', webpage, 'playlist',
default='{}'), playlist_id)
if playlist:
type_ = playlist.get('type')
episode_id = playlist.get('id')
if not type_:
type_ = self._html_search_regex(
r'getPlaylistUrl\(\[\{"type":"(.+?)","id":".+?"\}\],',
webpage, 'type')
if not episode_id:
episode_id = self._html_search_regex(View on GitHub (pinned to 956b8c5855)
Solutions
- Confirm the exact episode plays at ceskatelevize.cz in a browser; expired content cannot be extracted.
- Make sure you are on the correct episode URL (the IDEC is derived from the page you passed).
- Update to yt-dlp for current Ceska televize support.
- If the page plays fine, the Czech error strings likely changed — patch the tuple in ceskatelevize.py to include the new text.
Example fix
# before: bonus id fetched with wrong type_
query = {'hash': iframe_hash, 'origin': 'iVysilani', 'autoStart': 'true', 'IDEC': bonus_id}
# after: use correct type for bonus content
query = {'hash': iframe_hash, 'origin': 'iVysilani', 'autoStart': 'true', 'bonus': bonus_id} Defensive patterns
Strategy: try-catch
Try / catch
from youtube_dl.utils import ExtractorError
try:
ydl.extract_info(url)
except ExtractorError as e:
if 'no video with IDEC available' in str(e):
mark_expired(url) # backend rejected the IDEC; permanent
else:
raise Prevention
- Double-check episode URLs still play in a browser before queueing.
- Treat this as permanent for the given IDEC (no point retrying).
- After CT site updates, verify the Czech error strings still match.
When it happens
Trigger: Requesting the embed player with an IDEC that the backend rejects — typo or wrong-type id (a 'bonus' id passed as type IDEC), a bonus/episode whose availability ended, or an id valid only in a different context. The check is literal substring matching on the Czech error strings.
Common situations: Expired episodes/bonus clips whose playback window closed; site text changes that alter the error strings (making real failures look like unsupported pages); wrong id extracted from a redesigned page.
Related errors
- Failed to find IDEC id
- This content is not available at your territory due to limit
- Bigo says: %s (code %s)
- error.get('message') or error.get('error_subcode') or error[
- This video is DRM protected.
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/ad8432e9cadc01c4.
Report an issue: GitHub.