From 22feed08a1984d5c56b79b7322fe576d0d7bbbe5 Mon Sep 17 00:00:00 2001 From: Remita Amine Date: Sat, 19 Dec 2020 20:08:44 +0100 Subject: [PATCH] [common] remove unwanted query params from unsigned akamai manifest URLs --- youtube_dl/extractor/common.py | 9 ++++++++- youtube_dl/extractor/nrk.py | 3 +-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/youtube_dl/extractor/common.py b/youtube_dl/extractor/common.py index 79138f346..d5faa0eb7 100644 --- a/youtube_dl/extractor/common.py +++ b/youtube_dl/extractor/common.py @@ -2605,6 +2605,13 @@ class InfoExtractor(object): return entries def _extract_akamai_formats(self, manifest_url, video_id, hosts={}): + signed = 'hdnea=' in manifest_url + if not signed: + # https://learn.akamai.com/en-us/webhelp/media-services-on-demand/stream-packaging-user-guide/GUID-BE6C0F73-1E06-483B-B0EA-57984B91B7F9.html + manifest_url = re.sub( + r'(?:b=[\d,-]+|(?:__a__|attributes)=off|__b__=\d+)&?', + '', manifest_url).strip('?') + formats = [] hdcore_sign = 'hdcore=3.7.0' @@ -2630,7 +2637,7 @@ class InfoExtractor(object): formats.extend(m3u8_formats) http_host = hosts.get('http') - if http_host and m3u8_formats and 'hdnea=' not in m3u8_url: + if http_host and m3u8_formats and not signed: REPL_REGEX = r'https?://[^/]+/i/([^,]+),([^/]+),([^/]+)\.csmil/.+' qualities = re.match(REPL_REGEX, m3u8_url).group(2).split(',') qualities_length = len(qualities) diff --git a/youtube_dl/extractor/nrk.py b/youtube_dl/extractor/nrk.py index fdf2d7407..b545f291b 100644 --- a/youtube_dl/extractor/nrk.py +++ b/youtube_dl/extractor/nrk.py @@ -33,8 +33,7 @@ class NRKBaseIE(InfoExtractor): def _extract_nrk_formats(self, asset_url, video_id): if re.match(r'https?://[^/]+\.akamaihd\.net/i/', asset_url): - return self._extract_akamai_formats( - re.sub(r'(?:b=\d+-\d+|__a__=off)&?', '', asset_url), video_id) + return self._extract_akamai_formats(asset_url, video_id) asset_url = re.sub(r'(?:bw_(?:low|high)=\d+|no_audio_only)&?', '', asset_url) formats = self._extract_m3u8_formats( asset_url, video_id, 'mp4', 'm3u8_native', fatal=False)