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

  1. Open the URL in a browser to verify the episode is still offered in iVysilani; if gone, no tool-side fix exists
  2. Re-resolve from the current episode page (fresh URL) rather than a cached/bookmarked one, in case the IDEC changed
  3. 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

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


AI-assisted analysis of yt-dlp/yt-dlp@81ecd58b13 (2026-08-22). Data as JSON: /api/errors/0566364234f92475. Report an issue: GitHub.