mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	YoutubeIE: Detect new Vevo style videos
The url_encoded_fmt_stream_map can be found in the video page, but the signature must be decrypted, we get it from the webpage instead of the `get_video_info` pages because we have only discover the algorithm for keys with both sub keys of size 43.
This commit is contained in:
		| @@ -724,6 +724,16 @@ class YoutubeIE(InfoExtractor): | |||||||
|         # Decide which formats to download |         # Decide which formats to download | ||||||
|         req_format = self._downloader.params.get('format', None) |         req_format = self._downloader.params.get('format', None) | ||||||
|  |  | ||||||
|  |         try: | ||||||
|  |             mobj = re.search(r';ytplayer.config = ({.*?});', video_webpage) | ||||||
|  |             info = json.loads(mobj.group(1)) | ||||||
|  |             if 'dashmpd' in info['args']: | ||||||
|  |                 # Vevo videos with encrypted signatures | ||||||
|  |                 self.to_screen(u'Vevo video detected.') | ||||||
|  |                 video_info['url_encoded_fmt_stream_map'] = [info['args']['url_encoded_fmt_stream_map']] | ||||||
|  |         except ValueError: | ||||||
|  |             pass | ||||||
|  |  | ||||||
|         if 'conn' in video_info and video_info['conn'][0].startswith('rtmp'): |         if 'conn' in video_info and video_info['conn'][0].startswith('rtmp'): | ||||||
|             self.report_rtmp_download() |             self.report_rtmp_download() | ||||||
|             video_url_list = [(None, video_info['conn'][0])] |             video_url_list = [(None, video_info['conn'][0])] | ||||||
| @@ -735,6 +745,16 @@ class YoutubeIE(InfoExtractor): | |||||||
|                     url = url_data['url'][0] |                     url = url_data['url'][0] | ||||||
|                     if 'sig' in url_data: |                     if 'sig' in url_data: | ||||||
|                         url += '&signature=' + url_data['sig'][0] |                         url += '&signature=' + url_data['sig'][0] | ||||||
|  |                     if 's' in url_data: | ||||||
|  |                         def k(s): | ||||||
|  |                             """Decrypt the key the two subkeys must have a length of 43""" | ||||||
|  |                             (a,b) = s.split('.') | ||||||
|  |                             b = ''.join([b[:8],a[0],b[9:18],b[-4],b[19:39], b[18]])[0:40] | ||||||
|  |                             a = a[-40:] | ||||||
|  |                             s_dec = '.'.join((a,b))[::-1] | ||||||
|  |                             return s_dec | ||||||
|  |                         key = k(url_data['s'][0]) | ||||||
|  |                         url += '&signature=' + key | ||||||
|                     if 'ratebypass' not in url: |                     if 'ratebypass' not in url: | ||||||
|                         url += '&ratebypass=yes' |                         url += '&ratebypass=yes' | ||||||
|                     url_map[url_data['itag'][0]] = url |                     url_map[url_data['itag'][0]] = url | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jaime Marquínez Ferrándiz
					Jaime Marquínez Ferrándiz