From 00f4764cb7fdb39e3fd238440c373a2d7712d8d2 Mon Sep 17 00:00:00 2001 From: Remita Amine Date: Wed, 13 Jul 2016 15:54:43 +0100 Subject: [PATCH] [common] extract vbr, abr and fps for Unified Streaming Platform m3u8 manifests --- youtube_dl/extractor/common.py | 26 ++++++++++---------------- youtube_dl/extractor/wat.py | 12 +----------- 2 files changed, 11 insertions(+), 27 deletions(-) diff --git a/youtube_dl/extractor/common.py b/youtube_dl/extractor/common.py index df546da27..29544c1a8 100644 --- a/youtube_dl/extractor/common.py +++ b/youtube_dl/extractor/common.py @@ -1207,6 +1207,7 @@ def _extract_m3u8_formats(self, m3u8_url, video_id, ext=None, 'url': format_url(line.strip()), 'tbr': tbr, 'ext': ext, + 'fps': float_or_none(last_info.get('FRAME-RATE')), 'protocol': entry_protocol, 'preference': preference, } @@ -1215,24 +1216,17 @@ def _extract_m3u8_formats(self, m3u8_url, video_id, ext=None, width_str, height_str = resolution.split('x') f['width'] = int(width_str) f['height'] = int(height_str) - codecs = last_info.get('CODECS') - if codecs: - vcodec, acodec = [None] * 2 - va_codecs = codecs.split(',') - if len(va_codecs) == 1: - # Audio only entries usually come with single codec and - # no resolution. For more robustness we also check it to - # be mp4 audio. - if not resolution and va_codecs[0].startswith('mp4a'): - vcodec, acodec = 'none', va_codecs[0] - else: - vcodec = va_codecs[0] - else: - vcodec, acodec = va_codecs[:2] + # Unified Streaming Platform + mobj = re.search( + r'audio.*?(?:%3D|=)(\d+)(?:-video.*?(?:%3D|=)(\d+))?', f['url']) + if mobj: + abr, vbr = mobj.groups() + abr, vbr = float_or_none(abr, 1000), float_or_none(vbr, 1000) f.update({ - 'acodec': acodec, - 'vcodec': vcodec, + 'vbr': vbr, + 'abr': abr, }) + f.update(parse_codecs(last_info.get('CODECS'))) if last_media is not None: f['m3u8_media'] = last_media last_media = None diff --git a/youtube_dl/extractor/wat.py b/youtube_dl/extractor/wat.py index de7d6b559..48fc438ed 100644 --- a/youtube_dl/extractor/wat.py +++ b/youtube_dl/extractor/wat.py @@ -9,7 +9,6 @@ ExtractorError, unified_strdate, HEADRequest, - float_or_none, ) @@ -95,16 +94,7 @@ def extract_url(path_template, url_type): m3u8_url.replace('ios.', 'web.').replace('.m3u8', '.f4m'), video_id, f4m_id='hds', fatal=False)) for m3u8_format in m3u8_formats: - mobj = re.search( - r'audio.*?%3D(\d+)(?:-video.*?%3D(\d+))?', m3u8_format['url']) - if not mobj: - continue - abr, vbr = mobj.groups() - abr, vbr = float_or_none(abr, 1000), float_or_none(vbr, 1000) - m3u8_format.update({ - 'vbr': vbr, - 'abr': abr, - }) + vbr, abr = m3u8_format.get('vbr'), m3u8_format.get('abr') if not vbr or not abr: continue f = m3u8_format.copy()