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) | ||||
|         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): | ||||
|         """ Generate the title for a live video """ | ||||
|         now = datetime.datetime.now() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Sergey M․
					Sergey M․