ytdl-org/youtube-dl · error · ExtractorError
This video is DRM protected.
Error message
This video is DRM protected.
What it means
Raised by the Ruutu (Finnish broadcaster Nelonen) extractor when no formats could be extracted and the clip XML contains a non-empty ./Clip/DRM element. The stream is DRM-protected and youtube-dl will not (and legally cannot) decrypt it. Expected=True.
Source
Thrown at youtube_dl/extractor/ruutu.py:205
'url': video_url,
'width': width,
'height': height,
'tbr': tbr,
'preference': preference,
})
extract_formats(video_xml.find('./Clip'))
def pv(name):
node = find_xpath_attr(
video_xml, './Clip/PassthroughVariables/variable', 'name', name)
if node is not None:
return node.get('value')
if not formats:
drm = xpath_text(video_xml, './Clip/DRM', default=None)
if drm:
raise ExtractorError('This video is DRM protected.', expected=True)
ns_st_cds = pv('ns_st_cds')
if ns_st_cds != 'free':
raise ExtractorError('This video is %s.' % ns_st_cds, expected=True)
self._sort_formats(formats)
themes = pv('themes')
return {
'id': video_id,
'title': xpath_attr(video_xml, './/Behavior/Program', 'program_name', 'title', fatal=True),
'description': xpath_attr(video_xml, './/Behavior/Program', 'description', 'description'),
'thumbnail': xpath_attr(video_xml, './/Behavior/Startpicture', 'href', 'thumbnail'),
'duration': int_or_none(xpath_text(video_xml, './/Runtime', 'duration')) or int_or_none(pv('runtime')),
'age_limit': int_or_none(xpath_text(video_xml, './/AgeLimit', 'age limit')),
'upload_date': unified_strdate(pv('date_start')),
'series': pv('series_name'),
'season_number': int_or_none(pv('season_number')),View on GitHub (pinned to 956b8c5855)
Solutions
- There is no fix: DRM content is intentionally not extractable by youtube-dl.
- If you believe the content is free, check that the correct URL (non-DRM variant) is used.
- Use the official Ruutu player/app for playback; report nothing - this is by design.
Defensive patterns
Strategy: try-catch
Try / catch
try:
ydl.extract_info(url)
except ExtractorError as e:
if 'DRM protected' in str(e):
skip_permanently(video_id) # by design not extractable
else:
raise Prevention
- Never queue DRM Ruutu content in automated downloaders - it can only fail.
- Use the official Ruutu player for DRM content.
- If you expected free content, double-check you have the right (non-premium) URL.
When it happens
Trigger: Extracting a ruutu.fi URL whose clip metadata declares DRM - typically premium/rental content or live channels wrapped in PlayReady/Widevine.
Common situations: Subscribers trying to archive paid Ruutu content; live TV channels; trial-period rentals after expiry.
Related errors
- This video is DRM protected.
- This video is DRM protected.
- This video is DRM protected.
- This video is %s.
- DRM protected
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/6023a11b54670194.
Report an issue: GitHub.