{"record":{"id":"860f39a8fed507f2","repo":"ytdl-org/youtube-dl","slug":"this-video-is-drm-protected-860f39","errorCode":null,"errorMessage":"This video is DRM protected.","messagePattern":"This video is DRM protected\\.","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/prosiebensat1.py","lineNumber":38,"sourceCode":"    _GEO_BYPASS = False\n    _ACCESS_ID = None\n    _SUPPORTED_PROTOCOLS = 'dash:clear,hls:clear,progressive:clear'\n    _V4_BASE_URL = 'https://vas-v4.p7s1video.net/4.0/get'\n\n    def _extract_video_info(self, url, clip_id):\n        client_location = url\n\n        video = self._download_json(\n            'http://vas.sim-technik.de/vas/live/v2/videos',\n            clip_id, 'Downloading videos JSON', query={\n                'access_token': self._TOKEN,\n                'client_location': client_location,\n                'client_name': self._CLIENT_NAME,\n                'ids': clip_id,\n            })[0]\n\n        if video.get('is_protected') is True:\n            raise ExtractorError('This video is DRM protected.', expected=True)\n\n        formats = []\n        if self._ACCESS_ID:\n            raw_ct = self._ENCRYPTION_KEY + clip_id + self._IV + self._ACCESS_ID\n            protocols = self._download_json(\n                self._V4_BASE_URL + 'protocols', clip_id,\n                'Downloading protocols JSON',\n                headers=self.geo_verification_headers(), query={\n                    'access_id': self._ACCESS_ID,\n                    'client_token': sha1((raw_ct).encode()).hexdigest(),\n                    'video_id': clip_id,\n                }, fatal=False, expected_status=(403,)) or {}\n            error = protocols.get('error') or {}\n            if error.get('title') == 'Geo check failed':\n                self.raise_geo_restricted(countries=['AT', 'CH', 'DE'])\n            server_token = protocols.get('server_token')\n            if server_token:\n                urls = (self._download_json(","sourceCodeStart":20,"sourceCodeEnd":56,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/prosiebensat1.py#L20-L56","documentation":"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.","triggerScenarios":"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.","commonSituations":"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).","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."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    info = ydl.extract_info(url)\nexcept ExtractorError as e:\n    if 'DRM protected' in str(e):\n        skip_permanently(url)  # cannot be extracted","preventionTips":["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."],"tags":["prosiebensat1","drm","licensing","expected-error"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}