[ceskatelevize] Extract DASH formats (closes #12119, closes #12133)

pull/8/head
Sergey M․ 8 years ago
parent fcca0d53a8
commit 5cb2d36c82
No known key found for this signature in database
GPG Key ID: 2C393E0F18A9236D

@ -13,6 +13,7 @@ from ..utils import (
float_or_none, float_or_none,
sanitized_Request, sanitized_Request,
urlencode_postdata, urlencode_postdata,
USER_AGENTS,
) )
@ -114,71 +115,94 @@ class CeskaTelevizeIE(InfoExtractor):
'requestSource': 'iVysilani', 'requestSource': 'iVysilani',
} }
req = sanitized_Request(
'http://www.ceskatelevize.cz/ivysilani/ajax/get-client-playlist',
data=urlencode_postdata(data))
req.add_header('Content-type', 'application/x-www-form-urlencoded')
req.add_header('x-addr', '127.0.0.1')
req.add_header('X-Requested-With', 'XMLHttpRequest')
req.add_header('User-agent', 'Mozilla/5.0')
req.add_header('Referer', url)
playlistpage = self._download_json(req, playlist_id)
playlist_url = playlistpage['url']
if playlist_url == 'error_region':
raise ExtractorError(NOT_AVAILABLE_STRING, expected=True)
req = sanitized_Request(compat_urllib_parse_unquote(playlist_url))
req.add_header('Referer', url)
playlist_title = self._og_search_title(webpage, default=None)
playlist_description = self._og_search_description(webpage, default=None)
playlist = self._download_json(req, playlist_id)['playlist']
playlist_len = len(playlist)
entries = [] entries = []
for item in playlist:
is_live = item.get('type') == 'LIVE' for user_agent in (None, USER_AGENTS['Safari']):
formats = [] req = sanitized_Request(
for format_id, stream_url in item['streamUrls'].items(): 'http://www.ceskatelevize.cz/ivysilani/ajax/get-client-playlist',
formats.extend(self._extract_m3u8_formats( data=urlencode_postdata(data))
stream_url, playlist_id, 'mp4',
entry_protocol='m3u8' if is_live else 'm3u8_native', req.add_header('Content-type', 'application/x-www-form-urlencoded')
fatal=False)) req.add_header('x-addr', '127.0.0.1')
self._sort_formats(formats) req.add_header('X-Requested-With', 'XMLHttpRequest')
if user_agent:
item_id = item.get('id') or item['assetId'] req.add_header('User-Agent', user_agent)
title = item['title'] req.add_header('Referer', url)
duration = float_or_none(item.get('duration')) playlistpage = self._download_json(req, playlist_id, fatal=False)
thumbnail = item.get('previewImageUrl')
if not playlistpage:
subtitles = {} continue
if item.get('type') == 'VOD':
subs = item.get('subtitles') playlist_url = playlistpage['url']
if subs: if playlist_url == 'error_region':
subtitles = self.extract_subtitles(episode_id, subs) raise ExtractorError(NOT_AVAILABLE_STRING, expected=True)
if playlist_len == 1: req = sanitized_Request(compat_urllib_parse_unquote(playlist_url))
final_title = playlist_title or title req.add_header('Referer', url)
if is_live:
final_title = self._live_title(final_title) playlist_title = self._og_search_title(webpage, default=None)
else: playlist_description = self._og_search_description(webpage, default=None)
final_title = '%s (%s)' % (playlist_title, title)
playlist = self._download_json(req, playlist_id, fatal=False)
entries.append({ if not playlist:
'id': item_id, continue
'title': final_title,
'description': playlist_description if playlist_len == 1 else None, playlist = playlist.get('playlist')
'thumbnail': thumbnail, if not isinstance(playlist, list):
'duration': duration, continue
'formats': formats,
'subtitles': subtitles, playlist_len = len(playlist)
'is_live': is_live,
}) for num, item in enumerate(playlist):
is_live = item.get('type') == 'LIVE'
formats = []
for format_id, stream_url in item.get('streamUrls', {}).items():
if 'playerType=flash' in stream_url:
formats.extend(self._extract_m3u8_formats(
stream_url, playlist_id, 'mp4',
entry_protocol='m3u8' if is_live else 'm3u8_native',
fatal=False))
else:
formats.extend(self._extract_mpd_formats(
stream_url, playlist_id, fatal=False))
if user_agent and len(entries) == playlist_len:
entries[num]['formats'].extend(formats)
continue
item_id = item.get('id') or item['assetId']
title = item['title']
duration = float_or_none(item.get('duration'))
thumbnail = item.get('previewImageUrl')
subtitles = {}
if item.get('type') == 'VOD':
subs = item.get('subtitles')
if subs:
subtitles = self.extract_subtitles(episode_id, subs)
if playlist_len == 1:
final_title = playlist_title or title
if is_live:
final_title = self._live_title(final_title)
else:
final_title = '%s (%s)' % (playlist_title, title)
entries.append({
'id': item_id,
'title': final_title,
'description': playlist_description if playlist_len == 1 else None,
'thumbnail': thumbnail,
'duration': duration,
'formats': formats,
'subtitles': subtitles,
'is_live': is_live,
})
for e in entries:
self._sort_formats(e['formats'])
return self.playlist_result(entries, playlist_id, playlist_title, playlist_description) return self.playlist_result(entries, playlist_id, playlist_title, playlist_description)

Loading…
Cancel
Save