mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-30 22:25:19 +00: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', |             note='Downloading m3u8 information', | ||||||
|             errnote='Failed to download m3u8 information') |             errnote='Failed to download m3u8 information') | ||||||
|         last_info = None |         last_info = None | ||||||
|  |         last_media= None | ||||||
|         kv_rex = re.compile( |         kv_rex = re.compile( | ||||||
|             r'(?P<key>[a-zA-Z_-]+)=(?P<val>"[^"]+"|[^",]+)(?:,|$)') |             r'(?P<key>[a-zA-Z_-]+)=(?P<val>"[^"]+"|[^",]+)(?:,|$)') | ||||||
|         for line in m3u8_doc.splitlines(): |         for line in m3u8_doc.splitlines(): | ||||||
| @@ -849,6 +850,13 @@ class InfoExtractor(object): | |||||||
|                     if v.startswith('"'): |                     if v.startswith('"'): | ||||||
|                         v = v[1:-1] |                         v = v[1:-1] | ||||||
|                     last_info[m.group('key')] = v |                     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(): |             elif line.startswith('#') or not line.strip(): | ||||||
|                 continue |                 continue | ||||||
|             else: |             else: | ||||||
| @@ -877,6 +885,9 @@ class InfoExtractor(object): | |||||||
|                     width_str, height_str = resolution.split('x') |                     width_str, height_str = resolution.split('x') | ||||||
|                     f['width'] = int(width_str) |                     f['width'] = int(width_str) | ||||||
|                     f['height'] = int(height_str) |                     f['height'] = int(height_str) | ||||||
|  |                 if last_media is not None: | ||||||
|  |                     f['m3u8_media'] = last_media | ||||||
|  |                     last_media = None | ||||||
|                 formats.append(f) |                 formats.append(f) | ||||||
|                 last_info = {} |                 last_info = {} | ||||||
|         self._sort_formats(formats) |         self._sort_formats(formats) | ||||||
|   | |||||||
| @@ -348,6 +348,12 @@ class TwitchStreamIE(TwitchBaseIE): | |||||||
|             '%s/api/channel/hls/%s.m3u8?%s' |             '%s/api/channel/hls/%s.m3u8?%s' | ||||||
|             % (self._USHER_BASE, channel_id, compat_urllib_parse.urlencode(query).encode('utf-8')), |             % (self._USHER_BASE, channel_id, compat_urllib_parse.urlencode(query).encode('utf-8')), | ||||||
|             channel_id, 'mp4') |             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') |         view_count = stream.get('viewers') | ||||||
|         timestamp = parse_iso8601(stream.get('created_at')) |         timestamp = parse_iso8601(stream.get('created_at')) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jaime Marquínez Ferrándiz
					Jaime Marquínez Ferrándiz