commit: 8cb10807ed6c6aa8e0f316b3f1a31a91df46abdb
parent b8526c78f9a8a9101c5fd365f07c12e7b53c5ed9
Author: Sergey M․ <dstftw@gmail.com>
Date: Sat, 23 Mar 2019 21:43:50 +0700
[npo] Improve DRM detection
Diffstat:
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/youtube_dl/extractor/npo.py b/youtube_dl/extractor/npo.py
@@ -181,10 +181,7 @@ class NPOIE(NPOBaseIE):
def _real_extract(self, url):
video_id = self._match_id(url)
- try:
- return self._get_info(url, video_id)
- except ExtractorError:
- return self._get_old_info(video_id)
+ return self._get_info(url, video_id) or self._get_old_info(video_id)
def _get_info(self, url, video_id):
token = self._download_json(
@@ -206,6 +203,7 @@ class NPOIE(NPOBaseIE):
player_token = player['token']
+ drm = False
format_urls = set()
formats = []
for profile in ('hls', 'dash-widevine', 'dash-playready', 'smooth'):
@@ -227,7 +225,8 @@ class NPOIE(NPOBaseIE):
if not stream_url or stream_url in format_urls:
continue
format_urls.add(stream_url)
- if stream.get('protection') is not None:
+ if stream.get('protection') is not None or stream.get('keySystemOptions') is not None:
+ drm = True
continue
stream_type = stream.get('type')
stream_ext = determine_ext(stream_url)
@@ -246,6 +245,11 @@ class NPOIE(NPOBaseIE):
'url': stream_url,
})
+ if not formats:
+ if drm:
+ raise ExtractorError('This video is DRM protected.', expected=True)
+ return
+
self._sort_formats(formats)
info = {