diff options
| -rw-r--r-- | youtube_dl/extractor/nexx.py | 80 | 
1 files changed, 46 insertions, 34 deletions
| diff --git a/youtube_dl/extractor/nexx.py b/youtube_dl/extractor/nexx.py index 40946d26b..82d526c22 100644 --- a/youtube_dl/extractor/nexx.py +++ b/youtube_dl/extractor/nexx.py @@ -168,42 +168,54 @@ class NexxIE(InfoExtractor):              ps += '/%s/%s' % (s[0:2], s[2:4])          ps += '/%s/%s_' % (video_id, hash) -        formats = [{ -            'url': 'http://%s%s2500_var.mp4' % (stream_data['cdnPathHTTP'], ps), -            'format_id': '%s-http' % cdn, -        }] - -        def make_url(root, protocol): -            t = 'http://' + root + ps -            fd = stream_data['azureFileDistribution'].split(',') -            cdn_provider = stream_data['cdnProvider'] - -            def p0(p): -                return '_%s' % int(p[0]) if stream_data['applyAzureStructure'] == 1 else '' - -            if cdn_provider == 'ak': -                t += ',' -                for i in fd: -                    p = i.split(':') -                    t += p[1] + p0(p) + ',' -                t += '.mp4.csmil/master.m3u8' -            elif cdn_provider == 'ce': -                k = t.split('/') -                h = k.pop() -                t = '/'.join(k) -                t += '/asset.ism/manifest.' + ('m3u8' if protocol == 'hls' else 'mpd') + '?dcp_ver=aos4&videostream=' -                for i in fd: -                    p = i.split(':') -                    a = '%s%s%s.mp4:%s' % (h, p[1], p0(p), int(p[0]) * 1000) -                    t += a + ',' -                t = t[:-1] + '&audiostream=' + a.split(':')[0] -            return t +        t = 'http://%s' + ps +        fd = stream_data['azureFileDistribution'].split(',') +        cdn_provider = stream_data['cdnProvider'] + +        def p0(p): +            return '_%s' % p if stream_data['applyAzureStructure'] == 1 else '' + +        formats = [] +        if cdn_provider == 'ak': +            t += ',' +            for i in fd: +                p = i.split(':') +                t += p[1] + p0(int(p[0])) + ',' +            t += '.mp4.csmil/master.%s' +        elif cdn_provider == 'ce': +            k = t.split('/') +            h = k.pop() +            http_base = t = '/'.join(k) +            http_base = http_base % stream_data['cdnPathHTTP'] +            t += '/asset.ism/manifest.%s?dcp_ver=aos4&videostream=' +            for i in fd: +                p = i.split(':') +                tbr = int(p[0]) +                filename = '%s%s%s.mp4' % (h, p[1], p0(tbr)) +                f = { +                    'url': http_base + '/' + filename, +                    'format_id': '%s-http-%d' % (cdn, tbr), +                    'tbr': tbr, +                } +                width_height = p[1].split('x') +                if len(width_height) == 2: +                    f.update({ +                        'width': int_or_none(width_height[0]), +                        'height': int_or_none(width_height[1]), +                    }) +                formats.append(f) +                a = filename + ':%s' % (tbr * 1000) +                t += a + ',' +            t = t[:-1] + '&audiostream=' + a.split(':')[0] +        else: +            assert False -        formats.extend(self._extract_mpd_formats( -            make_url(stream_data['cdnPathDASH'], 'dash'), video_id, -            mpd_id='%s-dash' % cdn, fatal=False)) +        if cdn_provider == 'ce': +            formats.extend(self._extract_mpd_formats( +                t % (stream_data['cdnPathDASH'], 'mpd'), video_id, +                mpd_id='%s-dash' % cdn, fatal=False))          formats.extend(self._extract_m3u8_formats( -            make_url(stream_data['cdnPathHLS'], 'hls'), video_id, 'mp4', +            t % (stream_data['cdnPathHLS'], 'm3u8'), video_id, 'mp4',              entry_protocol='m3u8_native', m3u8_id='%s-hls' % cdn, fatal=False))          return formats | 
