yt-dlp/yt-dlp · error · ExtractorError
no video with IDEC available
Error message
no video with IDEC available
What it means
Raised after the CeskaTelevize iFramePlayer embed page is fetched with the resolved IDEC and the returned HTML contains 'Neplatny parametr pro prehravac' (invalid player parameter) or 'IDEC nebyl nalezen' (IDEC not found). The site itself is reporting that this IDEC no longer maps to a playable video. It is marked expected=True, so yt-dlp treats it as a normal site response rather than an extractor bug.
Source
Thrown at yt_dlp/extractor/ceskatelevize.py:134
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 f'{NOT_AVAILABLE_STRING}</p>' 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 81ecd58b13)
Solutions
- Open the URL in a browser to verify the episode is still offered in iVysilani; if gone, no tool-side fix exists
- Re-resolve from the current episode page (fresh URL) rather than a cached/bookmarked one, in case the IDEC changed
- If the video plays in the browser but yt-dlp still fails, update yt-dlp and report the URL upstream
Defensive patterns
Strategy: try-catch
Try / catch
from yt_dlp.utils import ExtractorError
try:
info = ydl.extract_info(url, download=False)
except ExtractorError as e:
if e.expected and 'no video with IDEC available' in str(e):
mark_permanently_unavailable(url) # expired/removed VOD; do not retry
else:
raise Prevention
- Treat this as permanent: drop the URL from retry queues instead of looping
- For time-limited CT content, download within the licensing window, not days later
- Check e.expected before alerting — expected site errors are not bugs
When it happens
Trigger: The VOD episode was removed or expired from the iVysilani archive; a live stream ended and its IDEC was invalidated; a bonus-type IDEC (type_='bonus') was consumed after the bonus was taken down; the IDEC was resolved from stale Next.js data for a broadcast that never started.
Common situations: Downloading news clips or live sports replays that CT only licenses for a short window; retrying old queue entries days later; scripted jobs that store IDEC-bearing URLs long-term.
Related errors
- {self.IE_NAME} said: {expired}
- This video is not available yet. Release date: {start_date}
- Episode {playlist_id} is no longer available
- {error}
- Content is not a video/podcast
AI-assisted analysis of yt-dlp/yt-dlp@81ecd58b13 (2026-08-22).
Data as JSON: /api/errors/0566364234f92475.
Report an issue: GitHub.