mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-30 22:25:19 +00:00 
			
		
		
		
	[extractor/common] Add generic SMIL formats extraction routine
This commit is contained in:
		| @@ -793,6 +793,49 @@ class InfoExtractor(object): | |||||||
|         self._sort_formats(formats) |         self._sort_formats(formats) | ||||||
|         return formats |         return formats | ||||||
|  |  | ||||||
|  |     # TODO: improve extraction | ||||||
|  |     def _extract_smil_formats(self, smil_url, video_id): | ||||||
|  |         smil = self._download_xml( | ||||||
|  |             smil_url, video_id, 'Downloading SMIL file', | ||||||
|  |             'Unable to download SMIL file') | ||||||
|  |  | ||||||
|  |         base = smil.find('./head/meta').get('base') | ||||||
|  |  | ||||||
|  |         formats = [] | ||||||
|  |         rtmp_count = 0 | ||||||
|  |         for video in smil.findall('./body/switch/video'): | ||||||
|  |             src = video.get('src') | ||||||
|  |             if not src: | ||||||
|  |                 continue | ||||||
|  |             bitrate = int_or_none(video.get('system-bitrate') or video.get('systemBitrate'), 1000) | ||||||
|  |             width = int_or_none(video.get('width')) | ||||||
|  |             height = int_or_none(video.get('height')) | ||||||
|  |             proto = video.get('proto') | ||||||
|  |             if not proto: | ||||||
|  |                 if base: | ||||||
|  |                     if base.startswith('rtmp'): | ||||||
|  |                         proto = 'rtmp' | ||||||
|  |                     elif base.startswith('http'): | ||||||
|  |                         proto = 'http' | ||||||
|  |             ext = video.get('ext') | ||||||
|  |             if proto == 'm3u8': | ||||||
|  |                 formats.extend(self._extract_m3u8_formats(src, video_id, ext)) | ||||||
|  |             elif proto == 'rtmp': | ||||||
|  |                 rtmp_count += 1 | ||||||
|  |                 streamer = video.get('streamer') or base | ||||||
|  |                 formats.append({ | ||||||
|  |                     'url': streamer, | ||||||
|  |                     'play_path': src, | ||||||
|  |                     'ext': 'flv', | ||||||
|  |                     'format_id': 'rtmp-%d' % (rtmp_count if bitrate is None else bitrate), | ||||||
|  |                     'tbr': bitrate, | ||||||
|  |                     'width': width, | ||||||
|  |                     'height': height, | ||||||
|  |                 }) | ||||||
|  |         self._sort_formats(formats) | ||||||
|  |  | ||||||
|  |         return formats | ||||||
|  |  | ||||||
|     def _live_title(self, name): |     def _live_title(self, name): | ||||||
|         """ Generate the title for a live video """ |         """ Generate the title for a live video """ | ||||||
|         now = datetime.datetime.now() |         now = datetime.datetime.now() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Sergey M․
					Sergey M․