mirror of
				https://github.com/ytdl-org/youtube-dl
				synced 2025-10-31 09:43:32 +00:00 
			
		
		
		
	[livestream] Do not fail if SMIL download fails
This commit is contained in:
		
							parent
							
								
									7fa547ab02
								
							
						
					
					
						commit
						8f3034d871
					
				| @ -33,6 +33,49 @@ class LivestreamIE(InfoExtractor): | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     def _parse_smil(self, video_id, smil_url): | ||||
|         formats = [] | ||||
|         _SWITCH_XPATH = ( | ||||
|             './/{http://www.w3.org/2001/SMIL20/Language}body/' | ||||
|             '{http://www.w3.org/2001/SMIL20/Language}switch') | ||||
|         smil_doc = self._download_xml( | ||||
|             smil_url, video_id, | ||||
|             note='Downloading SMIL information', | ||||
|             errnote='Unable to download SMIL information', | ||||
|             fatal=False) | ||||
|         if smil_doc is False:  # Download failed | ||||
|             return formats | ||||
|         title_node = find_xpath_attr( | ||||
|             smil_doc, './/{http://www.w3.org/2001/SMIL20/Language}meta', | ||||
|             'name', 'title') | ||||
|         if title_node is None: | ||||
|             self.report_warning('Cannot find SMIL id') | ||||
|             switch_node = smil_doc.find(_SWITCH_XPATH) | ||||
|         else: | ||||
|             title_id = title_node.attrib['content'] | ||||
|             switch_node = find_xpath_attr( | ||||
|                 smil_doc, _SWITCH_XPATH, 'id', title_id) | ||||
|         if switch_node is None: | ||||
|             raise ExtractorError('Cannot find switch node') | ||||
|         video_nodes = switch_node.findall( | ||||
|             '{http://www.w3.org/2001/SMIL20/Language}video') | ||||
| 
 | ||||
|         for vn in video_nodes: | ||||
|             tbr = int_or_none(vn.attrib.get('system-bitrate')) | ||||
|             furl = ( | ||||
|                 'http://livestream-f.akamaihd.net/%s?v=3.0.3&fp=WIN%%2014,0,0,145' % | ||||
|                 (vn.attrib['src'])) | ||||
|             if 'clipBegin' in vn.attrib: | ||||
|                 furl += '&ssek=' + vn.attrib['clipBegin'] | ||||
|             formats.append({ | ||||
|                 'url': furl, | ||||
|                 'format_id': 'smil_%d' % tbr, | ||||
|                 'ext': 'flv', | ||||
|                 'tbr': tbr, | ||||
|                 'preference': -1000, | ||||
|             }) | ||||
|         return formats | ||||
| 
 | ||||
|     def _extract_video_info(self, video_data): | ||||
|         video_id = compat_str(video_data['id']) | ||||
| 
 | ||||
| @ -49,41 +92,7 @@ class LivestreamIE(InfoExtractor): | ||||
| 
 | ||||
|         smil_url = video_data.get('smil_url') | ||||
|         if smil_url: | ||||
|             _SWITCH_XPATH = ( | ||||
|                 './/{http://www.w3.org/2001/SMIL20/Language}body/' | ||||
|                 '{http://www.w3.org/2001/SMIL20/Language}switch') | ||||
|             smil_doc = self._download_xml( | ||||
|                 smil_url, video_id, note='Downloading SMIL information') | ||||
| 
 | ||||
|             title_node = find_xpath_attr( | ||||
|                 smil_doc, './/{http://www.w3.org/2001/SMIL20/Language}meta', | ||||
|                 'name', 'title') | ||||
|             if title_node is None: | ||||
|                 self.report_warning('Cannot find SMIL id') | ||||
|                 switch_node = smil_doc.find(_SWITCH_XPATH) | ||||
|             else: | ||||
|                 title_id = title_node.attrib['content'] | ||||
|                 switch_node = find_xpath_attr( | ||||
|                     smil_doc, _SWITCH_XPATH, 'id', title_id) | ||||
|             if switch_node is None: | ||||
|                 raise ExtractorError('Cannot find switch node') | ||||
|             video_nodes = switch_node.findall( | ||||
|                 '{http://www.w3.org/2001/SMIL20/Language}video') | ||||
| 
 | ||||
|             for vn in video_nodes: | ||||
|                 tbr = int_or_none(vn.attrib.get('system-bitrate')) | ||||
|                 furl = ( | ||||
|                     'http://livestream-f.akamaihd.net/%s?v=3.0.3&fp=WIN%%2014,0,0,145' % | ||||
|                     (vn.attrib['src'])) | ||||
|                 if 'clipBegin' in vn.attrib: | ||||
|                     furl += '&ssek=' + vn.attrib['clipBegin'] | ||||
|                 formats.append({ | ||||
|                     'url': furl, | ||||
|                     'format_id': 'smil_%d' % tbr, | ||||
|                     'ext': 'flv', | ||||
|                     'tbr': tbr, | ||||
|                     'preference': -1000, | ||||
|                 }) | ||||
|             formats.extend(self._parse_smil(video_id, smil_url)) | ||||
|         self._sort_formats(formats) | ||||
| 
 | ||||
|         return { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Philipp Hagemeister
						Philipp Hagemeister