[brightcove] raise ExtractorError for DRM protected videos(closes #23467)(closes...
authorRemita Amine <remitamine@gmail.com>
Tue, 29 Dec 2020 13:05:23 +0000 (14:05 +0100)
committerRemita Amine <remitamine@gmail.com>
Tue, 29 Dec 2020 13:11:37 +0000 (14:11 +0100)
youtube_dl/extractor/brightcove.py

index 65b44c0994c4fd0985801ebb36ec8b21c0fac493..6022076acaf24727fe436b7fb50a16f1a9029259 100644 (file)
@@ -471,13 +471,18 @@ class BrightcoveNewIE(AdobePassIE):
     def _parse_brightcove_metadata(self, json_data, video_id, headers={}):
         title = json_data['name'].strip()
 
+        num_drm_sources = 0
         formats = []
-        for source in json_data.get('sources', []):
+        sources = json_data.get('sources') or []
+        for source in sources:
             container = source.get('container')
             ext = mimetype2ext(source.get('type'))
             src = source.get('src')
             # https://support.brightcove.com/playback-api-video-fields-reference#key_systems_object
-            if ext == 'ism' or container == 'WVM' or source.get('key_systems'):
+            if container == 'WVM' or source.get('key_systems'):
+                num_drm_sources += 1
+                continue
+            elif ext == 'ism':
                 continue
             elif ext == 'm3u8' or container == 'M2TS':
                 if not src:
@@ -535,11 +540,14 @@ class BrightcoveNewIE(AdobePassIE):
                     })
                 formats.append(f)
 
-        errors = json_data.get('errors')
-        if not formats and errors:
-            error = errors[0]
-            raise ExtractorError(
-                error.get('message') or error.get('error_subcode') or error['error_code'], expected=True)
+        if not formats:
+            errors = json_data.get('errors')
+            if errors:
+                error = errors[0]
+                raise ExtractorError(
+                    error.get('message') or error.get('error_subcode') or error['error_code'], expected=True)
+            if sources and num_drm_sources == len(sources):
+                raise ExtractorError('This video is DRM protected.', expected=True)
 
         self._sort_formats(formats)