mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[extractor/paramountplus] Better DRM detection (#5126)
Closes #5119 Authored by: bashonly
This commit is contained in:
		| @@ -3,6 +3,7 @@ import itertools | ||||
| from .common import InfoExtractor | ||||
| from .cbs import CBSBaseIE | ||||
| from ..utils import ( | ||||
|     ExtractorError, | ||||
|     int_or_none, | ||||
|     url_or_none, | ||||
| ) | ||||
| @@ -24,14 +25,22 @@ class ParamountPlusIE(CBSBaseIE): | ||||
|             'ext': 'mp4', | ||||
|             'title': 'CatDog - Climb Every CatDog/The Canine Mutiny', | ||||
|             'description': 'md5:7ac835000645a69933df226940e3c859', | ||||
|             'duration': 1418, | ||||
|             'duration': 1426, | ||||
|             'timestamp': 920264400, | ||||
|             'upload_date': '19990301', | ||||
|             'uploader': 'CBSI-NEW', | ||||
|             'episode_number': 5, | ||||
|             'thumbnail': r're:https?://.+\.jpg$', | ||||
|             'season': 'Season 2', | ||||
|             'chapters': 'count:3', | ||||
|             'episode': 'Episode 5', | ||||
|             'season_number': 2, | ||||
|             'series': 'CatDog', | ||||
|         }, | ||||
|         'params': { | ||||
|             'skip_download': 'm3u8', | ||||
|         }, | ||||
|         'expected_warnings': ['Ignoring subtitle tracks'],  # TODO: Investigate this | ||||
|     }, { | ||||
|         'url': 'https://www.paramountplus.com/shows/video/6hSWYWRrR9EUTz7IEe5fJKBhYvSUfexd/', | ||||
|         'info_dict': { | ||||
| @@ -43,10 +52,18 @@ class ParamountPlusIE(CBSBaseIE): | ||||
|             'timestamp': 1627063200, | ||||
|             'upload_date': '20210723', | ||||
|             'uploader': 'CBSI-NEW', | ||||
|             'episode_number': 81, | ||||
|             'thumbnail': r're:https?://.+\.jpg$', | ||||
|             'season': 'Season 2', | ||||
|             'chapters': 'count:4', | ||||
|             'episode': 'Episode 81', | ||||
|             'season_number': 2, | ||||
|             'series': 'Tooning Out The News', | ||||
|         }, | ||||
|         'params': { | ||||
|             'skip_download': 'm3u8', | ||||
|         }, | ||||
|         'expected_warnings': ['Ignoring subtitle tracks'], | ||||
|     }, { | ||||
|         'url': 'https://www.paramountplus.com/movies/video/vM2vm0kE6vsS2U41VhMRKTOVHyQAr6pC/', | ||||
|         'info_dict': { | ||||
| @@ -54,14 +71,18 @@ class ParamountPlusIE(CBSBaseIE): | ||||
|             'ext': 'mp4', | ||||
|             'title': 'Daddy\'s Home', | ||||
|             'upload_date': '20151225', | ||||
|             'description': 'md5:a0beaf24e8d3b0e81b2ee41d47c06f33', | ||||
|             'description': 'md5:9a6300c504d5e12000e8707f20c54745', | ||||
|             'uploader': 'CBSI-NEW', | ||||
|             'timestamp': 1451030400, | ||||
|             'thumbnail': r're:https?://.+\.jpg$', | ||||
|             'chapters': 'count:0', | ||||
|             'duration': 5761, | ||||
|             'series': 'Paramount+ Movies', | ||||
|         }, | ||||
|         'params': { | ||||
|             'skip_download': 'm3u8', | ||||
|         }, | ||||
|         'expected_warnings': ['Ignoring subtitle tracks'],  # TODO: Investigate this | ||||
|         'skip': 'DRM', | ||||
|     }, { | ||||
|         'url': 'https://www.paramountplus.com/movies/video/5EKDXPOzdVf9voUqW6oRuocyAEeJGbEc/', | ||||
|         'info_dict': { | ||||
| @@ -72,11 +93,15 @@ class ParamountPlusIE(CBSBaseIE): | ||||
|             'timestamp': 1577865600, | ||||
|             'title': 'Sonic the Hedgehog', | ||||
|             'upload_date': '20200101', | ||||
|             'thumbnail': r're:https?://.+\.jpg$', | ||||
|             'chapters': 'count:0', | ||||
|             'duration': 5932, | ||||
|             'series': 'Paramount+ Movies', | ||||
|         }, | ||||
|         'params': { | ||||
|             'skip_download': 'm3u8', | ||||
|         }, | ||||
|         'expected_warnings': ['Ignoring subtitle tracks'], | ||||
|         'skip': 'DRM', | ||||
|     }, { | ||||
|         'url': 'https://www.paramountplus.com/shows/the-real-world/video/mOVeHeL9ub9yWdyzSZFYz8Uj4ZBkVzQg/the-real-world-reunion/', | ||||
|         'only_matching': True, | ||||
| @@ -99,18 +124,42 @@ class ParamountPlusIE(CBSBaseIE): | ||||
|         asset_types = { | ||||
|             item.get('assetType'): { | ||||
|                 'format': 'SMIL', | ||||
|                 'formats': 'MPEG4,M3U', | ||||
|                 'formats': 'M3U+none,MPEG4',  # '+none' specifies ProtectionScheme (no DRM) | ||||
|             } for item in items_data['itemList'] | ||||
|         } | ||||
|         item = items_data['itemList'][-1] | ||||
|         return self._extract_common_video_info(content_id, asset_types, mpx_acc, extra_info={ | ||||
| 
 | ||||
|         info, error = {}, None | ||||
|         metadata = { | ||||
|             'title': item.get('title'), | ||||
|             'series': item.get('seriesTitle'), | ||||
|             'season_number': int_or_none(item.get('seasonNum')), | ||||
|             'episode_number': int_or_none(item.get('episodeNum')), | ||||
|             'duration': int_or_none(item.get('duration')), | ||||
|             'thumbnail': url_or_none(item.get('thumbnail')), | ||||
|         }) | ||||
|         } | ||||
|         try: | ||||
|             info = self._extract_common_video_info(content_id, asset_types, mpx_acc, extra_info=metadata) | ||||
|         except ExtractorError as e: | ||||
|             error = e | ||||
| 
 | ||||
|         # Check for DRM formats to give appropriate error | ||||
|         if not info.get('formats'): | ||||
|             for query in asset_types.values(): | ||||
|                 query['formats'] = 'MPEG-DASH,M3U,MPEG4'  # allows DRM formats | ||||
| 
 | ||||
|             try: | ||||
|                 drm_info = self._extract_common_video_info(content_id, asset_types, mpx_acc, extra_info=metadata) | ||||
|             except ExtractorError: | ||||
|                 if error: | ||||
|                     raise error from None | ||||
|                 raise | ||||
|             if drm_info['formats']: | ||||
|                 self.report_drm(content_id) | ||||
|             elif error: | ||||
|                 raise error | ||||
| 
 | ||||
|         return info | ||||
| 
 | ||||
| 
 | ||||
| class ParamountPlusSeriesIE(InfoExtractor): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 bashonly
					bashonly