mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-03 21:37:07 -05:00 
			
		
		
		
	Simplify formats accumulation for f4m/m3u8/smil formats
Now all _extract_*_formats routines return a list
This commit is contained in:
		@@ -53,16 +53,12 @@ class AMPIE(InfoExtractor):
 | 
			
		||||
            media = media_data['@attributes']
 | 
			
		||||
            media_type = media['type']
 | 
			
		||||
            if media_type == 'video/f4m':
 | 
			
		||||
                f4m_formats = self._extract_f4m_formats(
 | 
			
		||||
                formats.extend(self._extract_f4m_formats(
 | 
			
		||||
                    media['url'] + '?hdcore=3.4.0&plugin=aasp-3.4.0.132.124',
 | 
			
		||||
                    video_id, f4m_id='hds', fatal=False)
 | 
			
		||||
                if f4m_formats:
 | 
			
		||||
                    formats.extend(f4m_formats)
 | 
			
		||||
                    video_id, f4m_id='hds', fatal=False))
 | 
			
		||||
            elif media_type == 'application/x-mpegURL':
 | 
			
		||||
                m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                    media['url'], video_id, 'mp4', m3u8_id='hls', fatal=False)
 | 
			
		||||
                if m3u8_formats:
 | 
			
		||||
                    formats.extend(m3u8_formats)
 | 
			
		||||
                formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                    media['url'], video_id, 'mp4', m3u8_id='hls', fatal=False))
 | 
			
		||||
            else:
 | 
			
		||||
                formats.append({
 | 
			
		||||
                    'format_id': media_data['media-category']['@attributes']['label'],
 | 
			
		||||
 
 | 
			
		||||
@@ -113,16 +113,12 @@ class ARDMediathekIE(InfoExtractor):
 | 
			
		||||
                    if quality != 'auto' and ext in ('f4m', 'm3u8'):
 | 
			
		||||
                        continue
 | 
			
		||||
                    if ext == 'f4m':
 | 
			
		||||
                        f4m_formats = self._extract_f4m_formats(
 | 
			
		||||
                        formats.extend(self._extract_f4m_formats(
 | 
			
		||||
                            stream_url + '?hdcore=3.1.1&plugin=aasp-3.1.1.69.124',
 | 
			
		||||
                            video_id, preference=-1, f4m_id='hds', fatal=False)
 | 
			
		||||
                        if f4m_formats:
 | 
			
		||||
                            formats.extend(f4m_formats)
 | 
			
		||||
                            video_id, preference=-1, f4m_id='hds', fatal=False))
 | 
			
		||||
                    elif ext == 'm3u8':
 | 
			
		||||
                        m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                            stream_url, video_id, 'mp4', preference=1, m3u8_id='hls', fatal=False)
 | 
			
		||||
                        if m3u8_formats:
 | 
			
		||||
                            formats.extend(m3u8_formats)
 | 
			
		||||
                        formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                            stream_url, video_id, 'mp4', preference=1, m3u8_id='hls', fatal=False))
 | 
			
		||||
                    else:
 | 
			
		||||
                        if server and server.startswith('rtmp'):
 | 
			
		||||
                            f = {
 | 
			
		||||
 
 | 
			
		||||
@@ -134,10 +134,8 @@ class AtresPlayerIE(InfoExtractor):
 | 
			
		||||
 | 
			
		||||
        m3u8_url = player.get('urlVideoHls')
 | 
			
		||||
        if m3u8_url:
 | 
			
		||||
            m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                m3u8_url, episode_id, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False)
 | 
			
		||||
            if m3u8_formats:
 | 
			
		||||
                formats.extend(m3u8_formats)
 | 
			
		||||
            formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                m3u8_url, episode_id, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False))
 | 
			
		||||
 | 
			
		||||
        timestamp = int_or_none(self._download_webpage(
 | 
			
		||||
            self._TIME_API_URL,
 | 
			
		||||
@@ -170,9 +168,7 @@ class AtresPlayerIE(InfoExtractor):
 | 
			
		||||
                continue
 | 
			
		||||
            else:
 | 
			
		||||
                f4m_url = video_url[:-9] + '/manifest.f4m'
 | 
			
		||||
            f4m_formats = self._extract_f4m_formats(f4m_url, video_id, f4m_id='hds', fatal=False)
 | 
			
		||||
            if f4m_formats:
 | 
			
		||||
                formats.extend(f4m_formats)
 | 
			
		||||
            formats.extend(self._extract_f4m_formats(f4m_url, video_id, f4m_id='hds', fatal=False))
 | 
			
		||||
        self._sort_formats(formats)
 | 
			
		||||
 | 
			
		||||
        path_data = player.get('pathData')
 | 
			
		||||
 
 | 
			
		||||
@@ -45,15 +45,11 @@ class AudiMediaIE(InfoExtractor):
 | 
			
		||||
 | 
			
		||||
            stream_url_hls = json_data.get('stream_url_hls')
 | 
			
		||||
            if stream_url_hls:
 | 
			
		||||
                m3u8_formats = self._extract_m3u8_formats(stream_url_hls, video_id, 'mp4', entry_protocol='m3u8_native', m3u8_id='hls', fatal=False)
 | 
			
		||||
                if m3u8_formats:
 | 
			
		||||
                    formats.extend(m3u8_formats)
 | 
			
		||||
                formats.extend(self._extract_m3u8_formats(stream_url_hls, video_id, 'mp4', entry_protocol='m3u8_native', m3u8_id='hls', fatal=False))
 | 
			
		||||
 | 
			
		||||
            stream_url_hds = json_data.get('stream_url_hds')
 | 
			
		||||
            if stream_url_hds:
 | 
			
		||||
                f4m_formats = self._extract_f4m_formats(json_data.get('stream_url_hds') + '?hdcore=3.4.0', video_id, -1, f4m_id='hds', fatal=False)
 | 
			
		||||
                if f4m_formats:
 | 
			
		||||
                    formats.extend(f4m_formats)
 | 
			
		||||
                formats.extend(self._extract_f4m_formats(json_data.get('stream_url_hds') + '?hdcore=3.4.0', video_id, -1, f4m_id='hds', fatal=False))
 | 
			
		||||
 | 
			
		||||
            for video_version in json_data.get('video_versions'):
 | 
			
		||||
                video_version_url = video_version.get('download_url') or video_version.get('stream_url')
 | 
			
		||||
 
 | 
			
		||||
@@ -223,11 +223,9 @@ class BBCCoUkIE(InfoExtractor):
 | 
			
		||||
            elif transfer_format == 'dash':
 | 
			
		||||
                pass
 | 
			
		||||
            elif transfer_format == 'hls':
 | 
			
		||||
                m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                    href, programme_id, ext='mp4', entry_protocol='m3u8_native',
 | 
			
		||||
                    m3u8_id=supplier, fatal=False)
 | 
			
		||||
                if m3u8_formats:
 | 
			
		||||
                    formats.extend(m3u8_formats)
 | 
			
		||||
                    m3u8_id=supplier, fatal=False))
 | 
			
		||||
            # Direct link
 | 
			
		||||
            else:
 | 
			
		||||
                formats.append({
 | 
			
		||||
 
 | 
			
		||||
@@ -41,15 +41,11 @@ class BloombergIE(InfoExtractor):
 | 
			
		||||
            if not stream_url:
 | 
			
		||||
                continue
 | 
			
		||||
            if stream['muxing_format'] == 'TS':
 | 
			
		||||
                m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                    stream_url, video_id, 'mp4', m3u8_id='hls', fatal=False)
 | 
			
		||||
                if m3u8_formats:
 | 
			
		||||
                    formats.extend(m3u8_formats)
 | 
			
		||||
                formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                    stream_url, video_id, 'mp4', m3u8_id='hls', fatal=False))
 | 
			
		||||
            else:
 | 
			
		||||
                f4m_formats = self._extract_f4m_formats(
 | 
			
		||||
                    stream_url, video_id, f4m_id='hds', fatal=False)
 | 
			
		||||
                if f4m_formats:
 | 
			
		||||
                    formats.extend(f4m_formats)
 | 
			
		||||
                formats.extend(self._extract_f4m_formats(
 | 
			
		||||
                    stream_url, video_id, f4m_id='hds', fatal=False))
 | 
			
		||||
        self._sort_formats(formats)
 | 
			
		||||
 | 
			
		||||
        return {
 | 
			
		||||
 
 | 
			
		||||
@@ -121,15 +121,11 @@ class BRIE(InfoExtractor):
 | 
			
		||||
            format_url = xpath_text(asset, ['downloadUrl', 'url'])
 | 
			
		||||
            asset_type = asset.get('type')
 | 
			
		||||
            if asset_type == 'HDS':
 | 
			
		||||
                f4m_formats = self._extract_f4m_formats(
 | 
			
		||||
                    format_url + '?hdcore=3.2.0', media_id, f4m_id='hds', fatal=False)
 | 
			
		||||
                if f4m_formats:
 | 
			
		||||
                    formats.extend(f4m_formats)
 | 
			
		||||
                formats.extend(self._extract_f4m_formats(
 | 
			
		||||
                    format_url + '?hdcore=3.2.0', media_id, f4m_id='hds', fatal=False))
 | 
			
		||||
            elif asset_type == 'HLS':
 | 
			
		||||
                m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                    format_url, media_id, 'mp4', 'm3u8_native', m3u8_id='hds', fatal=False)
 | 
			
		||||
                if m3u8_formats:
 | 
			
		||||
                    formats.extend(m3u8_formats)
 | 
			
		||||
                formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                    format_url, media_id, 'mp4', 'm3u8_native', m3u8_id='hds', fatal=False))
 | 
			
		||||
            else:
 | 
			
		||||
                format_info = {
 | 
			
		||||
                    'ext': xpath_text(asset, 'mediaType'),
 | 
			
		||||
 
 | 
			
		||||
@@ -469,11 +469,9 @@ class BrightcoveNewIE(InfoExtractor):
 | 
			
		||||
            if source_type == 'application/x-mpegURL':
 | 
			
		||||
                if not src:
 | 
			
		||||
                    continue
 | 
			
		||||
                m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                    src, video_id, 'mp4', entry_protocol='m3u8_native',
 | 
			
		||||
                    m3u8_id='hls', fatal=False)
 | 
			
		||||
                if m3u8_formats:
 | 
			
		||||
                    formats.extend(m3u8_formats)
 | 
			
		||||
                    m3u8_id='hls', fatal=False))
 | 
			
		||||
            else:
 | 
			
		||||
                streaming_src = source.get('streaming_src')
 | 
			
		||||
                stream_name, app_name = source.get('stream_name'), source.get('app_name')
 | 
			
		||||
 
 | 
			
		||||
@@ -910,10 +910,8 @@ class InfoExtractor(object):
 | 
			
		||||
                # may differ leading to inability to resolve the format by requested
 | 
			
		||||
                # bitrate in f4m downloader
 | 
			
		||||
                if determine_ext(manifest_url) == 'f4m':
 | 
			
		||||
                    f4m_formats = self._extract_f4m_formats(
 | 
			
		||||
                        manifest_url, video_id, preference, f4m_id, fatal=fatal)
 | 
			
		||||
                    if f4m_formats:
 | 
			
		||||
                        formats.extend(f4m_formats)
 | 
			
		||||
                    formats.extend(self._extract_f4m_formats(
 | 
			
		||||
                        manifest_url, video_id, preference, f4m_id, fatal=fatal))
 | 
			
		||||
                    continue
 | 
			
		||||
            tbr = int_or_none(media_el.attrib.get('bitrate'))
 | 
			
		||||
            formats.append({
 | 
			
		||||
@@ -1147,10 +1145,8 @@ class InfoExtractor(object):
 | 
			
		||||
            src_url = src if src.startswith('http') else compat_urlparse.urljoin(base, src)
 | 
			
		||||
 | 
			
		||||
            if proto == 'm3u8' or src_ext == 'm3u8':
 | 
			
		||||
                m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                    src_url, video_id, ext or 'mp4', m3u8_id='hls', fatal=False)
 | 
			
		||||
                if m3u8_formats:
 | 
			
		||||
                    formats.extend(m3u8_formats)
 | 
			
		||||
                formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                    src_url, video_id, ext or 'mp4', m3u8_id='hls', fatal=False))
 | 
			
		||||
                continue
 | 
			
		||||
 | 
			
		||||
            if src_ext == 'f4m':
 | 
			
		||||
@@ -1162,9 +1158,7 @@ class InfoExtractor(object):
 | 
			
		||||
                    }
 | 
			
		||||
                f4m_url += '&' if '?' in f4m_url else '?'
 | 
			
		||||
                f4m_url += compat_urllib_parse.urlencode(f4m_params)
 | 
			
		||||
                f4m_formats = self._extract_f4m_formats(f4m_url, video_id, f4m_id='hds', fatal=False)
 | 
			
		||||
                if f4m_formats:
 | 
			
		||||
                    formats.extend(f4m_formats)
 | 
			
		||||
                formats.extend(self._extract_f4m_formats(f4m_url, video_id, f4m_id='hds', fatal=False))
 | 
			
		||||
                continue
 | 
			
		||||
 | 
			
		||||
            if src_url.startswith('http') and self._is_valid_url(src, video_id):
 | 
			
		||||
 
 | 
			
		||||
@@ -148,15 +148,11 @@ class DailymotionIE(DailymotionBaseInfoExtractor):
 | 
			
		||||
                        continue
 | 
			
		||||
                    ext = determine_ext(media_url)
 | 
			
		||||
                    if type_ == 'application/x-mpegURL' or ext == 'm3u8':
 | 
			
		||||
                        m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                            media_url, video_id, 'mp4', m3u8_id='hls', fatal=False)
 | 
			
		||||
                        if m3u8_formats:
 | 
			
		||||
                            formats.extend(m3u8_formats)
 | 
			
		||||
                        formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                            media_url, video_id, 'mp4', m3u8_id='hls', fatal=False))
 | 
			
		||||
                    elif type_ == 'application/f4m' or ext == 'f4m':
 | 
			
		||||
                        f4m_formats = self._extract_f4m_formats(
 | 
			
		||||
                            media_url, video_id, preference=-1, f4m_id='hds', fatal=False)
 | 
			
		||||
                        if f4m_formats:
 | 
			
		||||
                            formats.extend(f4m_formats)
 | 
			
		||||
                        formats.extend(self._extract_f4m_formats(
 | 
			
		||||
                            media_url, video_id, preference=-1, f4m_id='hds', fatal=False))
 | 
			
		||||
                    else:
 | 
			
		||||
                        f = {
 | 
			
		||||
                            'url': media_url,
 | 
			
		||||
 
 | 
			
		||||
@@ -56,10 +56,8 @@ class DCNBaseIE(InfoExtractor):
 | 
			
		||||
        m3u8_url = self._html_search_regex(
 | 
			
		||||
            r'file\s*:\s*"([^"]+)', webpage, 'm3u8 url', fatal=False)
 | 
			
		||||
        if m3u8_url:
 | 
			
		||||
            m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                m3u8_url, video_id, 'mp4', entry_protocol, m3u8_id='hls', fatal=None)
 | 
			
		||||
            if m3u8_formats:
 | 
			
		||||
                formats.extend(m3u8_formats)
 | 
			
		||||
            formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                m3u8_url, video_id, 'mp4', entry_protocol, m3u8_id='hls', fatal=None))
 | 
			
		||||
 | 
			
		||||
        rtsp_url = self._search_regex(
 | 
			
		||||
            r'<a[^>]+href="(rtsp://[^"]+)"', webpage, 'rtsp url', fatal=False)
 | 
			
		||||
 
 | 
			
		||||
@@ -65,18 +65,14 @@ class EitbIE(InfoExtractor):
 | 
			
		||||
            if token_data:
 | 
			
		||||
                token = token_data.get('token')
 | 
			
		||||
                if token:
 | 
			
		||||
                    m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                        '%s?hdnts=%s' % (hls_url, token), video_id, m3u8_id='hls', fatal=False)
 | 
			
		||||
                    if m3u8_formats:
 | 
			
		||||
                        formats.extend(m3u8_formats)
 | 
			
		||||
                    formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                        '%s?hdnts=%s' % (hls_url, token), video_id, m3u8_id='hls', fatal=False))
 | 
			
		||||
 | 
			
		||||
        hds_url = media.get('HDS_SURL')
 | 
			
		||||
        if hds_url:
 | 
			
		||||
            f4m_formats = self._extract_f4m_formats(
 | 
			
		||||
            formats.extend(self._extract_f4m_formats(
 | 
			
		||||
                '%s?hdcore=3.7.0' % hds_url.replace('euskalsvod', 'euskalvod'),
 | 
			
		||||
                video_id, f4m_id='hds', fatal=False)
 | 
			
		||||
            if f4m_formats:
 | 
			
		||||
                formats.extend(f4m_formats)
 | 
			
		||||
                video_id, f4m_id='hds', fatal=False))
 | 
			
		||||
 | 
			
		||||
        self._sort_formats(formats)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -151,11 +151,9 @@ class FunimationIE(InfoExtractor):
 | 
			
		||||
                        errors.append(format_url)
 | 
			
		||||
                        continue
 | 
			
		||||
                    if determine_ext(format_url) == 'm3u8':
 | 
			
		||||
                        m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                        formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                            format_url + auth_token, display_id, 'mp4', entry_protocol='m3u8_native',
 | 
			
		||||
                            preference=preference, m3u8_id='%s-hls' % funimation_id, fatal=False)
 | 
			
		||||
                        if m3u8_formats:
 | 
			
		||||
                            formats.extend(m3u8_formats)
 | 
			
		||||
                            preference=preference, m3u8_id='%s-hls' % funimation_id, fatal=False))
 | 
			
		||||
                    else:
 | 
			
		||||
                        tbr = int_or_none(self._search_regex(
 | 
			
		||||
                            r'-(\d+)[Kk]', format_url, 'tbr', default=None))
 | 
			
		||||
 
 | 
			
		||||
@@ -51,10 +51,8 @@ class FunnyOrDieIE(InfoExtractor):
 | 
			
		||||
 | 
			
		||||
        formats = []
 | 
			
		||||
 | 
			
		||||
        m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
            m3u8_url, video_id, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False)
 | 
			
		||||
        if m3u8_formats:
 | 
			
		||||
            formats.extend(m3u8_formats)
 | 
			
		||||
        formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
            m3u8_url, video_id, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False))
 | 
			
		||||
 | 
			
		||||
        bitrates = [int(bitrate) for bitrate in re.findall(r'[,/]v(\d+)[,/]', m3u8_url)]
 | 
			
		||||
        bitrates.sort()
 | 
			
		||||
 
 | 
			
		||||
@@ -369,11 +369,9 @@ class GloboIE(InfoExtractor):
 | 
			
		||||
            resource_url = resource['url']
 | 
			
		||||
            signed_url = '%s?h=%s&k=%s' % (resource_url, signed_hash, 'flash')
 | 
			
		||||
            if resource_id.endswith('m3u8') or resource_url.endswith('.m3u8'):
 | 
			
		||||
                m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                    signed_url, resource_id, 'mp4', entry_protocol='m3u8_native',
 | 
			
		||||
                    m3u8_id='hls', fatal=False)
 | 
			
		||||
                if m3u8_formats:
 | 
			
		||||
                    formats.extend(m3u8_formats)
 | 
			
		||||
                    m3u8_id='hls', fatal=False))
 | 
			
		||||
            else:
 | 
			
		||||
                formats.append({
 | 
			
		||||
                    'url': signed_url,
 | 
			
		||||
 
 | 
			
		||||
@@ -55,9 +55,7 @@ class HotStarIE(InfoExtractor):
 | 
			
		||||
                format_url = format_data['src']
 | 
			
		||||
                ext = determine_ext(format_url)
 | 
			
		||||
                if ext == 'm3u8':
 | 
			
		||||
                    m3u8_formats = self._extract_m3u8_formats(format_url, video_id, 'mp4', m3u8_id='hls', fatal=False)
 | 
			
		||||
                    if m3u8_formats:
 | 
			
		||||
                        formats.extend(m3u8_formats)
 | 
			
		||||
                    formats.extend(self._extract_m3u8_formats(format_url, video_id, 'mp4', m3u8_id='hls', fatal=False))
 | 
			
		||||
                elif ext == 'f4m':
 | 
			
		||||
                    # produce broken files
 | 
			
		||||
                    continue
 | 
			
		||||
 
 | 
			
		||||
@@ -129,14 +129,10 @@ class IGNIE(InfoExtractor):
 | 
			
		||||
        formats = []
 | 
			
		||||
        m3u8_url = api_data['refs'].get('m3uUrl')
 | 
			
		||||
        if m3u8_url:
 | 
			
		||||
            m3u8_formats = self._extract_m3u8_formats(m3u8_url, video_id, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False)
 | 
			
		||||
            if m3u8_formats:
 | 
			
		||||
                formats.extend(m3u8_formats)
 | 
			
		||||
            formats.extend(self._extract_m3u8_formats(m3u8_url, video_id, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False))
 | 
			
		||||
        f4m_url = api_data['refs'].get('f4mUrl')
 | 
			
		||||
        if f4m_url:
 | 
			
		||||
            f4m_formats = self._extract_f4m_formats(f4m_url, video_id, f4m_id='hds', fatal=False)
 | 
			
		||||
            if f4m_formats:
 | 
			
		||||
                formats.extend(f4m_formats)
 | 
			
		||||
            formats.extend(self._extract_f4m_formats(f4m_url, video_id, f4m_id='hds', fatal=False))
 | 
			
		||||
        for asset in api_data['assets']:
 | 
			
		||||
            formats.append({
 | 
			
		||||
                'url': asset['url'],
 | 
			
		||||
 
 | 
			
		||||
@@ -44,10 +44,8 @@ class JWPlatformIE(InfoExtractor):
 | 
			
		||||
            source_url = self._proto_relative_url(source['file'])
 | 
			
		||||
            source_type = source.get('type') or ''
 | 
			
		||||
            if source_type == 'application/vnd.apple.mpegurl':
 | 
			
		||||
                m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                    source_url, video_id, 'mp4', 'm3u8_native', fatal=False)
 | 
			
		||||
                if m3u8_formats:
 | 
			
		||||
                    formats.extend(m3u8_formats)
 | 
			
		||||
                formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                    source_url, video_id, 'mp4', 'm3u8_native', fatal=False))
 | 
			
		||||
            elif source_type.startswith('audio'):
 | 
			
		||||
                formats.append({
 | 
			
		||||
                    'url': source_url,
 | 
			
		||||
 
 | 
			
		||||
@@ -163,10 +163,8 @@ class KalturaIE(InfoExtractor):
 | 
			
		||||
        m3u8_url = info['dataUrl'].replace('format/url', 'format/applehttp')
 | 
			
		||||
        if referrer:
 | 
			
		||||
            m3u8_url += '?referrer=%s' % referrer
 | 
			
		||||
        m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
            m3u8_url, entry_id, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False)
 | 
			
		||||
        if m3u8_formats:
 | 
			
		||||
            formats.extend(m3u8_formats)
 | 
			
		||||
        formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
            m3u8_url, entry_id, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False))
 | 
			
		||||
 | 
			
		||||
        self._check_formats(formats, entry_id)
 | 
			
		||||
        self._sort_formats(formats)
 | 
			
		||||
 
 | 
			
		||||
@@ -110,23 +110,17 @@ class LivestreamIE(InfoExtractor):
 | 
			
		||||
 | 
			
		||||
        smil_url = video_data.get('smil_url')
 | 
			
		||||
        if smil_url:
 | 
			
		||||
            smil_formats = self._extract_smil_formats(smil_url, video_id)
 | 
			
		||||
            if smil_formats:
 | 
			
		||||
                formats.extend(smil_formats)
 | 
			
		||||
            formats.extend(self._extract_smil_formats(smil_url, video_id))
 | 
			
		||||
 | 
			
		||||
        m3u8_url = video_data.get('m3u8_url')
 | 
			
		||||
        if m3u8_url:
 | 
			
		||||
            m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                m3u8_url, video_id, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False)
 | 
			
		||||
            if m3u8_formats:
 | 
			
		||||
                formats.extend(m3u8_formats)
 | 
			
		||||
            formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                m3u8_url, video_id, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False))
 | 
			
		||||
 | 
			
		||||
        f4m_url = video_data.get('f4m_url')
 | 
			
		||||
        if f4m_url:
 | 
			
		||||
            f4m_formats = self._extract_f4m_formats(
 | 
			
		||||
                f4m_url, video_id, f4m_id='hds', fatal=False)
 | 
			
		||||
            if f4m_formats:
 | 
			
		||||
                formats.extend(f4m_formats)
 | 
			
		||||
            formats.extend(self._extract_f4m_formats(
 | 
			
		||||
                f4m_url, video_id, f4m_id='hds', fatal=False))
 | 
			
		||||
        self._sort_formats(formats)
 | 
			
		||||
 | 
			
		||||
        comments = [{
 | 
			
		||||
@@ -158,17 +152,13 @@ class LivestreamIE(InfoExtractor):
 | 
			
		||||
        formats = []
 | 
			
		||||
        smil_url = stream_info.get('play_url')
 | 
			
		||||
        if smil_url:
 | 
			
		||||
            smil_formats = self._extract_smil_formats(smil_url, broadcast_id)
 | 
			
		||||
            if smil_formats:
 | 
			
		||||
                formats.extend(smil_formats)
 | 
			
		||||
            formats.extend(self._extract_smil_formats(smil_url, broadcast_id))
 | 
			
		||||
 | 
			
		||||
        entry_protocol = 'm3u8' if is_live else 'm3u8_native'
 | 
			
		||||
        m3u8_url = stream_info.get('m3u8_url')
 | 
			
		||||
        if m3u8_url:
 | 
			
		||||
            m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                m3u8_url, broadcast_id, 'mp4', entry_protocol, m3u8_id='hls', fatal=False)
 | 
			
		||||
            if m3u8_formats:
 | 
			
		||||
                formats.extend(m3u8_formats)
 | 
			
		||||
            formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                m3u8_url, broadcast_id, 'mp4', entry_protocol, m3u8_id='hls', fatal=False))
 | 
			
		||||
 | 
			
		||||
        rtsp_url = stream_info.get('rtsp_url')
 | 
			
		||||
        if rtsp_url:
 | 
			
		||||
@@ -293,10 +283,8 @@ class LivestreamOriginalIE(InfoExtractor):
 | 
			
		||||
 | 
			
		||||
        m3u8_url = video_data.get('httpUrl')
 | 
			
		||||
        if m3u8_url:
 | 
			
		||||
            m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                m3u8_url, video_id, 'mp4', entry_protocol, m3u8_id='hls', fatal=False)
 | 
			
		||||
            if m3u8_formats:
 | 
			
		||||
                formats.extend(m3u8_formats)
 | 
			
		||||
            formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                m3u8_url, video_id, 'mp4', entry_protocol, m3u8_id='hls', fatal=False))
 | 
			
		||||
 | 
			
		||||
        rtsp_url = video_data.get('rtspUrl')
 | 
			
		||||
        if rtsp_url:
 | 
			
		||||
 
 | 
			
		||||
@@ -68,13 +68,9 @@ class NBAIE(InfoExtractor):
 | 
			
		||||
            if video_url.startswith('/'):
 | 
			
		||||
                continue
 | 
			
		||||
            if video_url.endswith('.m3u8'):
 | 
			
		||||
                m3u8_formats = self._extract_m3u8_formats(video_url, video_id, m3u8_id='hls', fatal=False)
 | 
			
		||||
                if m3u8_formats:
 | 
			
		||||
                    formats.extend(m3u8_formats)
 | 
			
		||||
                formats.extend(self._extract_m3u8_formats(video_url, video_id, m3u8_id='hls', fatal=False))
 | 
			
		||||
            elif video_url.endswith('.f4m'):
 | 
			
		||||
                f4m_formats = self._extract_f4m_formats(video_url + '?hdcore=3.4.1.1', video_id, f4m_id='hds', fatal=False)
 | 
			
		||||
                if f4m_formats:
 | 
			
		||||
                    formats.extend(f4m_formats)
 | 
			
		||||
                formats.extend(self._extract_f4m_formats(video_url + '?hdcore=3.4.1.1', video_id, f4m_id='hds', fatal=False))
 | 
			
		||||
            else:
 | 
			
		||||
                key = video_file.attrib.get('bitrate')
 | 
			
		||||
                format_info = {
 | 
			
		||||
 
 | 
			
		||||
@@ -44,17 +44,11 @@ class OoyalaBaseIE(InfoExtractor):
 | 
			
		||||
                    urls.append(url)
 | 
			
		||||
                    delivery_type = stream['delivery_type']
 | 
			
		||||
                    if delivery_type == 'hls' or '.m3u8' in url:
 | 
			
		||||
                        m3u8_formats = self._extract_m3u8_formats(url, embed_code, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False)
 | 
			
		||||
                        if m3u8_formats:
 | 
			
		||||
                            formats.extend(m3u8_formats)
 | 
			
		||||
                        formats.extend(self._extract_m3u8_formats(url, embed_code, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False))
 | 
			
		||||
                    elif delivery_type == 'hds' or '.f4m' in url:
 | 
			
		||||
                        f4m_formats = self._extract_f4m_formats(url, embed_code, f4m_id='hds', fatal=False)
 | 
			
		||||
                        if f4m_formats:
 | 
			
		||||
                            formats.extend(f4m_formats)
 | 
			
		||||
                        formats.extend(self._extract_f4m_formats(url, embed_code, f4m_id='hds', fatal=False))
 | 
			
		||||
                    elif '.smil' in url:
 | 
			
		||||
                        smil_formats = self._extract_smil_formats(url, embed_code, fatal=False)
 | 
			
		||||
                        if smil_formats:
 | 
			
		||||
                            formats.extend(smil_formats)
 | 
			
		||||
                        formats.extend(self._extract_smil_formats(url, embed_code, fatal=False))
 | 
			
		||||
                    else:
 | 
			
		||||
                        formats.append({
 | 
			
		||||
                            'url': url,
 | 
			
		||||
 
 | 
			
		||||
@@ -116,17 +116,13 @@ class RaiTVIE(InfoExtractor):
 | 
			
		||||
                ext = determine_ext(media_url)
 | 
			
		||||
                content_type = xpath_text(element, 'content-type')
 | 
			
		||||
                if ext == 'm3u8':
 | 
			
		||||
                    m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                    formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                        media_url, video_id, 'mp4', 'm3u8_native', m3u8_id='hls',
 | 
			
		||||
                        fatal=False)
 | 
			
		||||
                    if m3u8_formats:
 | 
			
		||||
                        formats.extend(m3u8_formats)
 | 
			
		||||
                        fatal=False))
 | 
			
		||||
                elif ext == 'f4m':
 | 
			
		||||
                    f4m_formats = self._extract_f4m_formats(
 | 
			
		||||
                    formats.extend(self._extract_f4m_formats(
 | 
			
		||||
                        media_url + '?hdcore=3.7.0&plugin=aasp-3.7.0.39.44',
 | 
			
		||||
                        video_id, f4m_id='hds', fatal=False)
 | 
			
		||||
                    if f4m_formats:
 | 
			
		||||
                        formats.extend(f4m_formats)
 | 
			
		||||
                        video_id, f4m_id='hds', fatal=False))
 | 
			
		||||
                elif ext == 'stl':
 | 
			
		||||
                    has_subtitle = True
 | 
			
		||||
                elif content_type.startswith('video/'):
 | 
			
		||||
 
 | 
			
		||||
@@ -58,15 +58,11 @@ class RutubeIE(InfoExtractor):
 | 
			
		||||
        for format_id, format_url in options['video_balancer'].items():
 | 
			
		||||
            ext = determine_ext(format_url)
 | 
			
		||||
            if ext == 'm3u8':
 | 
			
		||||
                m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                    format_url, video_id, 'mp4', m3u8_id=format_id, fatal=False)
 | 
			
		||||
                if m3u8_formats:
 | 
			
		||||
                    formats.extend(m3u8_formats)
 | 
			
		||||
                formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                    format_url, video_id, 'mp4', m3u8_id=format_id, fatal=False))
 | 
			
		||||
            elif ext == 'f4m':
 | 
			
		||||
                f4m_formats = self._extract_f4m_formats(
 | 
			
		||||
                    format_url, video_id, f4m_id=format_id, fatal=False)
 | 
			
		||||
                if f4m_formats:
 | 
			
		||||
                    formats.extend(f4m_formats)
 | 
			
		||||
                formats.extend(self._extract_f4m_formats(
 | 
			
		||||
                    format_url, video_id, f4m_id=format_id, fatal=False))
 | 
			
		||||
            else:
 | 
			
		||||
                formats.append({
 | 
			
		||||
                    'url': format_url,
 | 
			
		||||
 
 | 
			
		||||
@@ -63,15 +63,11 @@ class RuutuIE(InfoExtractor):
 | 
			
		||||
                    processed_urls.append(video_url)
 | 
			
		||||
                    ext = determine_ext(video_url)
 | 
			
		||||
                    if ext == 'm3u8':
 | 
			
		||||
                        m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                            video_url, video_id, 'mp4', m3u8_id='hls', fatal=False)
 | 
			
		||||
                        if m3u8_formats:
 | 
			
		||||
                            formats.extend(m3u8_formats)
 | 
			
		||||
                        formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                            video_url, video_id, 'mp4', m3u8_id='hls', fatal=False))
 | 
			
		||||
                    elif ext == 'f4m':
 | 
			
		||||
                        f4m_formats = self._extract_f4m_formats(
 | 
			
		||||
                            video_url, video_id, f4m_id='hds', fatal=False)
 | 
			
		||||
                        if f4m_formats:
 | 
			
		||||
                            formats.extend(f4m_formats)
 | 
			
		||||
                        formats.extend(self._extract_f4m_formats(
 | 
			
		||||
                            video_url, video_id, f4m_id='hds', fatal=False))
 | 
			
		||||
                    else:
 | 
			
		||||
                        proto = compat_urllib_parse_urlparse(video_url).scheme
 | 
			
		||||
                        if not child.tag.startswith('HTTP') and proto != 'rtmp':
 | 
			
		||||
 
 | 
			
		||||
@@ -57,9 +57,7 @@ class Tele13IE(InfoExtractor):
 | 
			
		||||
            if format_url and format_url not in urls:
 | 
			
		||||
                ext = determine_ext(format_url)
 | 
			
		||||
                if ext == 'm3u8':
 | 
			
		||||
                    m3u8_formats = self._extract_m3u8_formats(format_url, display_id, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False)
 | 
			
		||||
                    if m3u8_formats:
 | 
			
		||||
                        formats.extend(m3u8_formats)
 | 
			
		||||
                    formats.extend(self._extract_m3u8_formats(format_url, display_id, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False))
 | 
			
		||||
                elif YoutubeIE.suitable(format_url):
 | 
			
		||||
                    return self.url_result(format_url, 'Youtube')
 | 
			
		||||
                else:
 | 
			
		||||
 
 | 
			
		||||
@@ -132,13 +132,11 @@ class ToggleIE(InfoExtractor):
 | 
			
		||||
            vid_format = vid_format.replace(' ', '')
 | 
			
		||||
            # if geo-restricted, m3u8 is inaccessible, but mp4 is okay
 | 
			
		||||
            if ext == 'm3u8':
 | 
			
		||||
                m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                    video_url, video_id, ext='mp4', m3u8_id=vid_format,
 | 
			
		||||
                    note='Downloading %s m3u8 information' % vid_format,
 | 
			
		||||
                    errnote='Failed to download %s m3u8 information' % vid_format,
 | 
			
		||||
                    fatal=False)
 | 
			
		||||
                if m3u8_formats:
 | 
			
		||||
                    formats.extend(m3u8_formats)
 | 
			
		||||
                    fatal=False))
 | 
			
		||||
            elif ext in ('mp4', 'wvm'):
 | 
			
		||||
                # wvm are drm-protected files
 | 
			
		||||
                formats.append({
 | 
			
		||||
 
 | 
			
		||||
@@ -151,10 +151,8 @@ class VGTVIE(XstreamIE):
 | 
			
		||||
 | 
			
		||||
        hls_url = streams.get('hls')
 | 
			
		||||
        if hls_url:
 | 
			
		||||
            m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                hls_url, video_id, 'mp4', m3u8_id='hls', fatal=False)
 | 
			
		||||
            if m3u8_formats:
 | 
			
		||||
                formats.extend(m3u8_formats)
 | 
			
		||||
            formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                hls_url, video_id, 'mp4', m3u8_id='hls', fatal=False))
 | 
			
		||||
 | 
			
		||||
        hds_url = streams.get('hds')
 | 
			
		||||
        if hds_url:
 | 
			
		||||
 
 | 
			
		||||
@@ -277,11 +277,9 @@ class VikiIE(VikiBaseIE):
 | 
			
		||||
                r'^(\d+)[pP]$', format_id, 'height', default=None))
 | 
			
		||||
            for protocol, format_dict in stream_dict.items():
 | 
			
		||||
                if format_id == 'm3u8':
 | 
			
		||||
                    m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                    formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                        format_dict['url'], video_id, 'mp4', 'm3u8_native',
 | 
			
		||||
                        m3u8_id='m3u8-%s' % protocol, fatal=False)
 | 
			
		||||
                    if m3u8_formats:
 | 
			
		||||
                        formats.extend(m3u8_formats)
 | 
			
		||||
                        m3u8_id='m3u8-%s' % protocol, fatal=False))
 | 
			
		||||
                else:
 | 
			
		||||
                    formats.append({
 | 
			
		||||
                        'url': format_dict['url'],
 | 
			
		||||
 
 | 
			
		||||
@@ -437,10 +437,8 @@ class VimeoIE(VimeoBaseInfoExtractor):
 | 
			
		||||
            })
 | 
			
		||||
        m3u8_url = config_files.get('hls', {}).get('url')
 | 
			
		||||
        if m3u8_url:
 | 
			
		||||
            m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                m3u8_url, video_id, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False)
 | 
			
		||||
            if m3u8_formats:
 | 
			
		||||
                formats.extend(m3u8_formats)
 | 
			
		||||
            formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                m3u8_url, video_id, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False))
 | 
			
		||||
        # Bitrates are completely broken. Single m3u8 may contain entries in kbps and bps
 | 
			
		||||
        # at the same time without actual units specified. This lead to wrong sorting.
 | 
			
		||||
        self._sort_formats(formats, field_preference=('preference', 'height', 'width', 'fps', 'format_id'))
 | 
			
		||||
 
 | 
			
		||||
@@ -157,16 +157,12 @@ class WDRIE(InfoExtractor):
 | 
			
		||||
        preference = qualities(['S', 'M', 'L', 'XL'])
 | 
			
		||||
 | 
			
		||||
        if video_url.endswith('.f4m'):
 | 
			
		||||
            f4m_formats = self._extract_f4m_formats(video_url + '?hdcore=3.2.0&plugin=aasp-3.2.0.77.18', page_id, f4m_id='hds', fatal=False)
 | 
			
		||||
            if f4m_formats:
 | 
			
		||||
                formats.extend(f4m_formats)
 | 
			
		||||
            formats.extend(self._extract_f4m_formats(video_url + '?hdcore=3.2.0&plugin=aasp-3.2.0.77.18', page_id, f4m_id='hds', fatal=False))
 | 
			
		||||
        elif video_url.endswith('.smil'):
 | 
			
		||||
            smil_formats = self._extract_smil_formats(video_url, page_id, False, {
 | 
			
		||||
            formats.extend(self._extract_smil_formats(video_url, page_id, False, {
 | 
			
		||||
                'hdcore': '3.3.0',
 | 
			
		||||
                'plugin': 'aasp-3.3.0.99.43',
 | 
			
		||||
            })
 | 
			
		||||
            if smil_formats:
 | 
			
		||||
                formats.extend(smil_formats)
 | 
			
		||||
            }))
 | 
			
		||||
        else:
 | 
			
		||||
            formats.append({
 | 
			
		||||
                'url': video_url,
 | 
			
		||||
@@ -177,9 +173,7 @@ class WDRIE(InfoExtractor):
 | 
			
		||||
 | 
			
		||||
        m3u8_url = self._search_regex(r'rel="adaptiv"[^>]+href="([^"]+)"', webpage, 'm3u8 url', default=None)
 | 
			
		||||
        if m3u8_url:
 | 
			
		||||
            m3u8_formats = self._extract_m3u8_formats(m3u8_url, page_id, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False)
 | 
			
		||||
            if m3u8_formats:
 | 
			
		||||
                formats.extend(m3u8_formats)
 | 
			
		||||
            formats.extend(self._extract_m3u8_formats(m3u8_url, page_id, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False))
 | 
			
		||||
 | 
			
		||||
        direct_urls = re.findall(r'rel="web(S|M|L|XL)"[^>]+href="([^"]+)"', webpage)
 | 
			
		||||
        if direct_urls:
 | 
			
		||||
 
 | 
			
		||||
@@ -125,20 +125,14 @@ class ZDFIE(InfoExtractor):
 | 
			
		||||
            if ext == 'meta':
 | 
			
		||||
                continue
 | 
			
		||||
            elif ext == 'smil':
 | 
			
		||||
                smil_formats = self._extract_smil_formats(
 | 
			
		||||
                    video_url, video_id, fatal=False)
 | 
			
		||||
                if smil_formats:
 | 
			
		||||
                    formats.extend(smil_formats)
 | 
			
		||||
                formats.extend(self._extract_smil_formats(
 | 
			
		||||
                    video_url, video_id, fatal=False))
 | 
			
		||||
            elif ext == 'm3u8':
 | 
			
		||||
                m3u8_formats = self._extract_m3u8_formats(
 | 
			
		||||
                    video_url, video_id, 'mp4', m3u8_id='hls', fatal=False)
 | 
			
		||||
                if m3u8_formats:
 | 
			
		||||
                    formats.extend(m3u8_formats)
 | 
			
		||||
                formats.extend(self._extract_m3u8_formats(
 | 
			
		||||
                    video_url, video_id, 'mp4', m3u8_id='hls', fatal=False))
 | 
			
		||||
            elif ext == 'f4m':
 | 
			
		||||
                f4m_formats = self._extract_f4m_formats(
 | 
			
		||||
                    video_url, video_id, f4m_id='hds', fatal=False)
 | 
			
		||||
                if f4m_formats:
 | 
			
		||||
                    formats.extend(f4m_formats)
 | 
			
		||||
                formats.extend(self._extract_f4m_formats(
 | 
			
		||||
                    video_url, video_id, f4m_id='hds', fatal=False))
 | 
			
		||||
            else:
 | 
			
		||||
                proto = format_m.group('proto').lower()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user