ytdl-org/youtube-dl · error · ExtractorError
This video is DRM protected.
Error message
This video is DRM protected.
What it means
ProSiebenSat1BaseIE._real_extract (via the shared video-extraction helper) raises ExtractorError('This video is DRM protected.', expected=True) when the VAS API response for the clip (vas.sim-technik.de/vas/live/v2/videos) has is_protected == True. The broadcaster serves DRM-encrypted streams for some content, and youtube-dl cannot decrypt them, so it aborts early before requesting formats/protocols.
Source
Thrown at youtube_dl/extractor/prosiebensat1.py:38
_GEO_BYPASS = False
_ACCESS_ID = None
_SUPPORTED_PROTOCOLS = 'dash:clear,hls:clear,progressive:clear'
_V4_BASE_URL = 'https://vas-v4.p7s1video.net/4.0/get'
def _extract_video_info(self, url, clip_id):
client_location = url
video = self._download_json(
'http://vas.sim-technik.de/vas/live/v2/videos',
clip_id, 'Downloading videos JSON', query={
'access_token': self._TOKEN,
'client_location': client_location,
'client_name': self._CLIENT_NAME,
'ids': clip_id,
})[0]
if video.get('is_protected') is True:
raise ExtractorError('This video is DRM protected.', expected=True)
formats = []
if self._ACCESS_ID:
raw_ct = self._ENCRYPTION_KEY + clip_id + self._IV + self._ACCESS_ID
protocols = self._download_json(
self._V4_BASE_URL + 'protocols', clip_id,
'Downloading protocols JSON',
headers=self.geo_verification_headers(), query={
'access_id': self._ACCESS_ID,
'client_token': sha1((raw_ct).encode()).hexdigest(),
'video_id': clip_id,
}, fatal=False, expected_status=(403,)) or {}
error = protocols.get('error') or {}
if error.get('title') == 'Geo check failed':
self.raise_geo_restricted(countries=['AT', 'CH', 'DE'])
server_token = protocols.get('server_token')
if server_token:
urls = (self._download_json(View on GitHub (pinned to 956b8c5855)
Solutions
- There is no youtube-dl-side fix — DRM streams cannot be extracted; use the broadcaster's official apps/site for playback.
- Look for an alternate unprotected clip of the same content (different URL or free-tier episode).
- If you believe the content is not actually DRM'd, update youtube-dl in case the is_protected flag interpretation changed.
- Filter such URLs out of automated jobs by catching this expected error and skipping.
Defensive patterns
Strategy: try-catch
Try / catch
try:
info = ydl.extract_info(url)
except ExtractorError as e:
if 'DRM protected' in str(e):
skip_permanently(url) # cannot be extracted Prevention
- Filter DRM-flagged clips out of automated queues by catching the expected error.
- Do not retry DRM errors — no client-side remedy exists.
- Prefer free-tier episodes when building ProSiebenSat.1 playlists.
When it happens
Trigger: Extracting any ProSiebenSat.1-group clip (prosieben, sat1, kabel1, sixx, pro7maxx, etc.) whose VAS video JSON sets "is_protected": true; checked immediately after the videos JSON download, before the protocols/sources requests.
Common situations: Premium or current-season TV episodes, live-event replays, and some films on these German broadcasters are DRM-protected; users hitting old show links that switched to protected delivery; region plus DRM combined (the API returns protection regardless of geo).
Related errors
- This video is DRM protected.
- DRM protected
- This video is DRM protected.
- This video is DRM protected.
- This video is DRM protected.
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/860f39a8fed507f2.
Report an issue: GitHub.