mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-03 22:57:08 -05:00 
			
		
		
		
	[twitch:stream] Prefer the 'source' format (fixes #4972)
This commit is contained in:
		@@ -839,6 +839,7 @@ class InfoExtractor(object):
 | 
			
		||||
            note='Downloading m3u8 information',
 | 
			
		||||
            errnote='Failed to download m3u8 information')
 | 
			
		||||
        last_info = None
 | 
			
		||||
        last_media= None
 | 
			
		||||
        kv_rex = re.compile(
 | 
			
		||||
            r'(?P<key>[a-zA-Z_-]+)=(?P<val>"[^"]+"|[^",]+)(?:,|$)')
 | 
			
		||||
        for line in m3u8_doc.splitlines():
 | 
			
		||||
@@ -849,6 +850,13 @@ class InfoExtractor(object):
 | 
			
		||||
                    if v.startswith('"'):
 | 
			
		||||
                        v = v[1:-1]
 | 
			
		||||
                    last_info[m.group('key')] = v
 | 
			
		||||
            elif line.startswith('#EXT-X-MEDIA:'):
 | 
			
		||||
                last_media = {}
 | 
			
		||||
                for m in kv_rex.finditer(line):
 | 
			
		||||
                    v = m.group('val')
 | 
			
		||||
                    if v.startswith('"'):
 | 
			
		||||
                        v = v[1:-1]
 | 
			
		||||
                    last_media[m.group('key')] = v
 | 
			
		||||
            elif line.startswith('#') or not line.strip():
 | 
			
		||||
                continue
 | 
			
		||||
            else:
 | 
			
		||||
@@ -877,6 +885,9 @@ class InfoExtractor(object):
 | 
			
		||||
                    width_str, height_str = resolution.split('x')
 | 
			
		||||
                    f['width'] = int(width_str)
 | 
			
		||||
                    f['height'] = int(height_str)
 | 
			
		||||
                if last_media is not None:
 | 
			
		||||
                    f['m3u8_media'] = last_media
 | 
			
		||||
                    last_media = None
 | 
			
		||||
                formats.append(f)
 | 
			
		||||
                last_info = {}
 | 
			
		||||
        self._sort_formats(formats)
 | 
			
		||||
 
 | 
			
		||||
@@ -348,6 +348,12 @@ class TwitchStreamIE(TwitchBaseIE):
 | 
			
		||||
            '%s/api/channel/hls/%s.m3u8?%s'
 | 
			
		||||
            % (self._USHER_BASE, channel_id, compat_urllib_parse.urlencode(query).encode('utf-8')),
 | 
			
		||||
            channel_id, 'mp4')
 | 
			
		||||
        # prefer the 'source' stream, the others are limited to 30 fps
 | 
			
		||||
        def _sort_source(f):
 | 
			
		||||
            if f.get('m3u8_media') is not None and f['m3u8_media'].get('NAME') == 'Source':
 | 
			
		||||
                return 1
 | 
			
		||||
            return 0
 | 
			
		||||
        formats = sorted(formats, key=_sort_source)
 | 
			
		||||
 | 
			
		||||
        view_count = stream.get('viewers')
 | 
			
		||||
        timestamp = parse_iso8601(stream.get('created_at'))
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user