|
@@ -1243,7 +1243,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|
|
encoded_url_map = video_info.get('url_encoded_fmt_stream_map', [''])[0] + ',' + video_info.get('adaptive_fmts', [''])[0]
|
|
|
if 'rtmpe%3Dyes' in encoded_url_map:
|
|
|
raise ExtractorError('rtmpe downloads are not supported, see https://github.com/rg3/youtube-dl/issues/343 for more information.', expected=True)
|
|
|
- url_map = {}
|
|
|
+ formats = []
|
|
|
for url_data_str in encoded_url_map.split(','):
|
|
|
url_data = compat_parse_qs(url_data_str)
|
|
|
if 'itag' not in url_data or 'url' not in url_data:
|
|
@@ -1303,8 +1303,33 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|
|
url += '&signature=' + signature
|
|
|
if 'ratebypass' not in url:
|
|
|
url += '&ratebypass=yes'
|
|
|
- url_map[format_id] = url
|
|
|
- formats = _map_to_format_list(url_map)
|
|
|
+
|
|
|
+ width = None
|
|
|
+ height = None
|
|
|
+ size_str = url_data.get('size', [''])[0]
|
|
|
+ if size_str.count('x') == 1:
|
|
|
+ width, height = [int_or_none(x) for x in size_str.split('x')]
|
|
|
+
|
|
|
+ format_url = {
|
|
|
+ 'format_id': format_id,
|
|
|
+ 'url': url,
|
|
|
+ 'player_url': player_url,
|
|
|
+ # As of this writing these are only defined for DASH formats:
|
|
|
+ 'filesize': int_or_none(url_data.get('clen', [None])[0]),
|
|
|
+ 'tbr': float_or_none(url_data.get('bitrate', [None])[0], scale=1024),
|
|
|
+ 'width': width,
|
|
|
+ 'height': height,
|
|
|
+ 'fps': int_or_none(url_data.get('fps', [None])[0]),
|
|
|
+ }
|
|
|
+
|
|
|
+ # drop Nones so they do not overwrite the defaults from self._formats
|
|
|
+ format_url = dict((k, v) for k, v in format_url.items() if v is not None)
|
|
|
+
|
|
|
+ format_full = self._formats.get(format_id, {}).copy()
|
|
|
+ format_full.update(format_url)
|
|
|
+
|
|
|
+ formats.append(format_full)
|
|
|
+
|
|
|
elif video_info.get('hlsvp'):
|
|
|
manifest_url = video_info['hlsvp'][0]
|
|
|
url_map = self._extract_from_m3u8(manifest_url, video_id)
|