ytdl-org/youtube-dl · error · ExtractorError

DRM protected

Error message

DRM protected

What it means

Raised by Tele5IE when the joyn/disco _get_disco_api_info call fails with an ExtractorError whose message is 'Missing deviceId in context'. That upstream message is the platform's response when the asset is DRM-protected (device registration required), so the extractor rewrites it into the clearer 'DRM protected' (expected=True, chained via cause).

Source

Thrown at youtube_dl/extractor/tele5.py:91

        'url': 'https://www.tele5.de/anders-ist-sevda/',
        'only_matching': True,
    }]

    def _real_extract(self, url):
        video_id = self._match_id(url)
        webpage = self._download_webpage(url, video_id)
        player_element = self._search_regex(r'(<hyoga-player\b[^>]+?>)', webpage, 'video player')
        player_info = extract_attributes(player_element)
        asset_id, country, realm = (player_info[x] for x in ('assetid', 'locale', 'realm', ))
        endpoint = compat_urlparse.urlparse(player_info['endpoint']).hostname
        source_type = player_info.get('sourcetype')
        if source_type:
            endpoint = '%s-%s' % (source_type, endpoint)
        try:
            return self._get_disco_api_info(url, asset_id, endpoint, realm, country)
        except ExtractorError as e:
            if getattr(e, 'message', '') == 'Missing deviceId in context':
                raise ExtractorError('DRM protected', cause=e, expected=True)
            raise

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Accept it: youtube-dl does not circumvent DRM; this content cannot be downloaded with this tool.
  2. Check whether the same clip has a non-DRM source (e.g. the broadcaster's YouTube channel or an older free clip URL).
  3. Play it in a browser/app with an entitled account if you simply want to watch it.
  4. Do not retry — the refusal is permanent for that asset, not transient.
Defensive patterns

Strategy: try-catch

Try / catch

try:
    info = ydl.extract_info(url)
except ExtractorError as e:
    if e.expected and 'DRM' in str(e):
        log.info('DRM-protected asset, not downloadable: %s', url)
        return None
    raise

Prevention

When it happens

Trigger: Extracting a tele5.de video whose <hyoga-player> element resolves to a joyn disco asset that requires a registered DRM device; the API returns 'Missing deviceId in context' and the extractor translates it.

Common situations: Joyn/Tele5 premium or live content behind DRM; free clips that moved into DRM-protected delivery after platform changes; users expecting youtube-dl to bypass DRM (it does not).

Related errors


AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14). Data as JSON: /api/errors/0c7242a265e39ad9. Report an issue: GitHub.