[kaltura] extract subtitles and reduce requests
This commit is contained in:
		
							parent
							
								
									217d5ae013
								
							
						
					
					
						commit
						1094074c04
					
				| @ -62,6 +62,11 @@ class KalturaIE(InfoExtractor): | ||||
|         { | ||||
|             'url': 'https://cdnapisec.kaltura.com/html5/html5lib/v2.30.2/mwEmbedFrame.php/p/1337/uiconf_id/20540612/entry_id/1_sf5ovm7u?wid=_243342', | ||||
|             'only_matching': True, | ||||
|         }, | ||||
|         { | ||||
|             # video with subtitles | ||||
|             'url': 'kaltura:111032:1_cw786r8q', | ||||
|             'only_matching': True, | ||||
|         } | ||||
|     ] | ||||
| 
 | ||||
| @ -130,7 +135,6 @@ class KalturaIE(InfoExtractor): | ||||
|             video_id, actions, service_url, note='Downloading Kaltura signature')['ks'] | ||||
| 
 | ||||
|     def _get_video_info(self, video_id, partner_id, service_url=None): | ||||
|         signature = self._get_kaltura_signature(video_id, partner_id, service_url) | ||||
|         actions = [ | ||||
|             { | ||||
|                 'action': 'null', | ||||
| @ -138,18 +142,30 @@ class KalturaIE(InfoExtractor): | ||||
|                 'clientTag': 'kdp:v3.8.5', | ||||
|                 'format': 1,  # JSON, 2 = XML, 3 = PHP | ||||
|                 'service': 'multirequest', | ||||
|                 'ks': signature, | ||||
|             }, | ||||
|             { | ||||
|                 'expiry': 86400, | ||||
|                 'service': 'session', | ||||
|                 'action': 'startWidgetSession', | ||||
|                 'widgetId': '_%s' % partner_id, | ||||
|             }, | ||||
|             { | ||||
|                 'action': 'get', | ||||
|                 'entryId': video_id, | ||||
|                 'service': 'baseentry', | ||||
|                 'version': '-1', | ||||
|                 'ks': '{1:result:ks}', | ||||
|             }, | ||||
|             { | ||||
|                 'action': 'getbyentryid', | ||||
|                 'entryId': video_id, | ||||
|                 'service': 'flavorAsset', | ||||
|                 'ks': '{1:result:ks}', | ||||
|             }, | ||||
|             { | ||||
|                 'action': 'list', | ||||
|                 'filter:entryIdEqual': video_id, | ||||
|                 'service': 'caption_captionasset', | ||||
|                 'ks': '{1:result:ks}', | ||||
|             }, | ||||
|         ] | ||||
|         return self._kaltura_api_call( | ||||
| @ -161,8 +177,9 @@ class KalturaIE(InfoExtractor): | ||||
|         mobj = re.match(self._VALID_URL, url) | ||||
|         partner_id, entry_id = mobj.group('partner_id', 'id') | ||||
|         ks = None | ||||
|         captions = None | ||||
|         if partner_id and entry_id: | ||||
|             info, flavor_assets = self._get_video_info(entry_id, partner_id, smuggled_data.get('service_url')) | ||||
|             _, info, flavor_assets, captions = self._get_video_info(entry_id, partner_id, smuggled_data.get('service_url')) | ||||
|         else: | ||||
|             path, query = mobj.group('path', 'query') | ||||
|             if not path and not query: | ||||
| @ -181,7 +198,7 @@ class KalturaIE(InfoExtractor): | ||||
|                 raise ExtractorError('Invalid URL', expected=True) | ||||
|             if 'entry_id' in params: | ||||
|                 entry_id = params['entry_id'][0] | ||||
|                 info, flavor_assets = self._get_video_info(entry_id, partner_id) | ||||
|                 _, info, flavor_assets, captions = self._get_video_info(entry_id, partner_id) | ||||
|             elif 'uiconf_id' in params and 'flashvars[referenceId]' in params: | ||||
|                 reference_id = params['flashvars[referenceId]'][0] | ||||
|                 webpage = self._download_webpage(url, reference_id) | ||||
| @ -217,7 +234,7 @@ class KalturaIE(InfoExtractor): | ||||
|         formats = [] | ||||
|         for f in flavor_assets: | ||||
|             # Continue if asset is not ready | ||||
|             if f['status'] != 2: | ||||
|             if f.get('status') != 2: | ||||
|                 continue | ||||
|             video_url = sign_url( | ||||
|                 '%s/flavorId/%s' % (data_url, f['id'])) | ||||
| @ -240,13 +257,25 @@ class KalturaIE(InfoExtractor): | ||||
|                 m3u8_url, entry_id, 'mp4', 'm3u8_native', | ||||
|                 m3u8_id='hls', fatal=False)) | ||||
| 
 | ||||
|         self._check_formats(formats, entry_id) | ||||
|         self._sort_formats(formats) | ||||
| 
 | ||||
|         subtitles = {} | ||||
|         if captions: | ||||
|             for caption in captions.get('objects', []): | ||||
|                 print(caption) | ||||
|                 # Continue if caption is not ready | ||||
|                 if f.get('status') != 2: | ||||
|                     continue | ||||
|                 subtitles.setdefault(caption.get('languageCode') or caption.get('language'), []).append({ | ||||
|                     'url': '%s/api_v3/service/caption_captionasset/action/serve/captionAssetId/%s' % (self._SERVICE_URL, caption['id']), | ||||
|                     'ext': caption.get('fileExt'), | ||||
|                 }) | ||||
| 
 | ||||
|         return { | ||||
|             'id': entry_id, | ||||
|             'title': info['name'], | ||||
|             'formats': formats, | ||||
|             'subtitles': subtitles, | ||||
|             'description': clean_html(info.get('description')), | ||||
|             'thumbnail': info.get('thumbnailUrl'), | ||||
|             'duration': info.get('duration'), | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user