mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-11-24 05:36:56 +01:00
[common] add helper method for Wowza Streaming Engine format extraction
This commit is contained in:
parent
98b7506e96
commit
6ad0219556
@ -1795,6 +1795,49 @@ def _extract_akamai_formats(self, manifest_url, video_id):
|
|||||||
m3u8_id='hls', fatal=False))
|
m3u8_id='hls', fatal=False))
|
||||||
return formats
|
return formats
|
||||||
|
|
||||||
|
def _extract_wowza_formats(self, url, video_id, m3u8_entry_protocol='m3u8_native', skip_protocols=[]):
|
||||||
|
url = re.sub(r'/(?:manifest|playlist|jwplayer)\.(?:m3u8|f4m|mpd|smil)', '', url)
|
||||||
|
url_base = self._search_regex(r'(?:https?|rtmp|rtsp)(://[^?]+)', url, 'format url')
|
||||||
|
http_base_url = 'http' + url_base
|
||||||
|
formats = []
|
||||||
|
if 'm3u8' not in skip_protocols:
|
||||||
|
formats.extend(self._extract_m3u8_formats(
|
||||||
|
http_base_url + '/playlist.m3u8', video_id, 'mp4',
|
||||||
|
m3u8_entry_protocol, m3u8_id='hls', fatal=False))
|
||||||
|
if 'f4m' not in skip_protocols:
|
||||||
|
formats.extend(self._extract_f4m_formats(
|
||||||
|
http_base_url + '/manifest.f4m',
|
||||||
|
video_id, f4m_id='hds', fatal=False))
|
||||||
|
if re.search(r'(?:/smil:|\.smil)', url_base):
|
||||||
|
if 'dash' not in skip_protocols:
|
||||||
|
formats.extend(self._extract_mpd_formats(
|
||||||
|
http_base_url + '/manifest.mpd',
|
||||||
|
video_id, mpd_id='dash', fatal=False))
|
||||||
|
if 'smil' not in skip_protocols:
|
||||||
|
rtmp_formats = self._extract_smil_formats(
|
||||||
|
http_base_url + '/jwplayer.smil',
|
||||||
|
video_id, fatal=False)
|
||||||
|
for rtmp_format in rtmp_formats:
|
||||||
|
rtsp_format = rtmp_format.copy()
|
||||||
|
rtsp_format['url'] = '%s/%s' % (rtmp_format['url'], rtmp_format['play_path'])
|
||||||
|
del rtsp_format['play_path']
|
||||||
|
del rtsp_format['ext']
|
||||||
|
rtsp_format.update({
|
||||||
|
'url': rtsp_format['url'].replace('rtmp://', 'rtsp://'),
|
||||||
|
'format_id': rtmp_format['format_id'].replace('rtmp', 'rtsp'),
|
||||||
|
'protocol': 'rtsp',
|
||||||
|
})
|
||||||
|
formats.extend([rtmp_format, rtsp_format])
|
||||||
|
else:
|
||||||
|
for protocol in ('rtmp', 'rtsp'):
|
||||||
|
if protocol not in skip_protocols:
|
||||||
|
formats.append({
|
||||||
|
'url': protocol + url_base,
|
||||||
|
'format_id': protocol,
|
||||||
|
'protocol': protocol,
|
||||||
|
})
|
||||||
|
return formats
|
||||||
|
|
||||||
def _live_title(self, name):
|
def _live_title(self, name):
|
||||||
""" Generate the title for a live video """
|
""" Generate the title for a live video """
|
||||||
now = datetime.datetime.now()
|
now = datetime.datetime.now()
|
||||||
|
@ -48,8 +48,8 @@ def _real_extract(self, url):
|
|||||||
[r'data-filename="([^"]+)"', r'"filename"\s*:\s*"([^"]+)"'],
|
[r'data-filename="([^"]+)"', r'"filename"\s*:\s*"([^"]+)"'],
|
||||||
webpage, 'filename')
|
webpage, 'filename')
|
||||||
|
|
||||||
playlist_url = 'http://vod.streamcloud.be/%s/mp4:_definst_/%s.mp4/playlist.m3u8' % (application, filename)
|
playlist_url = 'http://vod.streamcloud.be/%s/_definst_/mp4:%s.mp4/playlist.m3u8' % (application, filename)
|
||||||
formats = self._extract_m3u8_formats(playlist_url, display_id, 'mp4')
|
formats = self._extract_wowza_formats(playlist_url, display_id)
|
||||||
self._sort_formats(formats)
|
self._sort_formats(formats)
|
||||||
|
|
||||||
title = self._og_search_title(webpage, default=display_id)
|
title = self._og_search_title(webpage, default=display_id)
|
||||||
|
@ -25,29 +25,8 @@ def _real_extract(self, url):
|
|||||||
title = unescapeHTML(self._og_search_title(webpage))
|
title = unescapeHTML(self._og_search_title(webpage))
|
||||||
hidden_inputs = self._hidden_inputs(webpage)
|
hidden_inputs = self._hidden_inputs(webpage)
|
||||||
|
|
||||||
base_url = self._search_regex(
|
formats = self._extract_wowza_formats(
|
||||||
'(.*/)(?:playlist.m3u8|manifest.mpd)',
|
hidden_inputs.get('HiddenmyhHlsLink') or hidden_inputs['HiddenmyDashLink'], video_id, skip_protocols=['f4m', 'smil'])
|
||||||
hidden_inputs.get('HiddenmyhHlsLink') or hidden_inputs['HiddenmyDashLink'],
|
|
||||||
'base url')
|
|
||||||
formats = self._extract_m3u8_formats(
|
|
||||||
base_url + 'playlist.m3u8', video_id, 'mp4',
|
|
||||||
'm3u8_native', m3u8_id='hls', fatal=False)
|
|
||||||
formats.extend(self._extract_mpd_formats(
|
|
||||||
base_url + 'manifest.mpd', video_id,
|
|
||||||
mpd_id='dash', fatal=False))
|
|
||||||
rtmp_formats = self._extract_smil_formats(
|
|
||||||
base_url + 'jwplayer.smil', video_id, fatal=False)
|
|
||||||
for rtmp_format in rtmp_formats:
|
|
||||||
rtsp_format = rtmp_format.copy()
|
|
||||||
rtsp_format['url'] = '%s/%s' % (rtmp_format['url'], rtmp_format['play_path'])
|
|
||||||
del rtsp_format['play_path']
|
|
||||||
del rtsp_format['ext']
|
|
||||||
rtsp_format.update({
|
|
||||||
'url': rtsp_format['url'].replace('rtmp://', 'rtsp://'),
|
|
||||||
'format_id': rtmp_format['format_id'].replace('rtmp', 'rtsp'),
|
|
||||||
'protocol': 'rtsp',
|
|
||||||
})
|
|
||||||
formats.extend([rtmp_format, rtsp_format])
|
|
||||||
self._sort_formats(formats)
|
self._sort_formats(formats)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
determine_ext,
|
|
||||||
float_or_none,
|
float_or_none,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -75,7 +74,6 @@ class VRTIE(InfoExtractor):
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
'url': 'http://cobra.canvas.be/cm/cobra/videozone/rubriek/film-videozone/1.2377055',
|
'url': 'http://cobra.canvas.be/cm/cobra/videozone/rubriek/film-videozone/1.2377055',
|
||||||
'md5': '',
|
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': '2377055',
|
'id': '2377055',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
@ -119,39 +117,17 @@ def _real_extract(self, url):
|
|||||||
video_id, 'mp4', m3u8_id='hls', fatal=False))
|
video_id, 'mp4', m3u8_id='hls', fatal=False))
|
||||||
|
|
||||||
if src:
|
if src:
|
||||||
if determine_ext(src) == 'm3u8':
|
formats = self._extract_wowza_formats(src, video_id)
|
||||||
formats.extend(self._extract_m3u8_formats(
|
if 'data-video-geoblocking="true"' not in webpage:
|
||||||
src, video_id, 'mp4', entry_protocol='m3u8_native',
|
for f in formats:
|
||||||
m3u8_id='hls', fatal=False))
|
if f['url'].startswith('rtsp://'):
|
||||||
formats.extend(self._extract_f4m_formats(
|
http_format = f.copy()
|
||||||
src.replace('playlist.m3u8', 'manifest.f4m'),
|
|
||||||
video_id, f4m_id='hds', fatal=False))
|
|
||||||
if 'data-video-geoblocking="true"' not in webpage:
|
|
||||||
rtmp_formats = self._extract_smil_formats(
|
|
||||||
src.replace('playlist.m3u8', 'jwplayer.smil'),
|
|
||||||
video_id, fatal=False)
|
|
||||||
formats.extend(rtmp_formats)
|
|
||||||
for rtmp_format in rtmp_formats:
|
|
||||||
rtmp_format_c = rtmp_format.copy()
|
|
||||||
rtmp_format_c['url'] = '%s/%s' % (rtmp_format['url'], rtmp_format['play_path'])
|
|
||||||
del rtmp_format_c['play_path']
|
|
||||||
del rtmp_format_c['ext']
|
|
||||||
http_format = rtmp_format_c.copy()
|
|
||||||
http_format.update({
|
http_format.update({
|
||||||
'url': rtmp_format_c['url'].replace('rtmp://', 'http://').replace('vod.', 'download.').replace('/_definst_/', '/').replace('mp4:', ''),
|
'url': f['url'].replace('rtsp://', 'http://').replace('vod.', 'download.').replace('/_definst_/', '/').replace('mp4:', ''),
|
||||||
'format_id': rtmp_format['format_id'].replace('rtmp', 'http'),
|
'format_id': f['format_id'].replace('rtsp', 'http'),
|
||||||
'protocol': 'http',
|
'protocol': 'http',
|
||||||
})
|
})
|
||||||
rtsp_format = rtmp_format_c.copy()
|
formats.append(http_format)
|
||||||
rtsp_format.update({
|
|
||||||
'url': rtsp_format['url'].replace('rtmp://', 'rtsp://'),
|
|
||||||
'format_id': rtmp_format['format_id'].replace('rtmp', 'rtsp'),
|
|
||||||
'protocol': 'rtsp',
|
|
||||||
})
|
|
||||||
formats.extend([http_format, rtsp_format])
|
|
||||||
else:
|
|
||||||
formats.extend(self._extract_f4m_formats(
|
|
||||||
'%s/manifest.f4m' % src, video_id, f4m_id='hds', fatal=False))
|
|
||||||
|
|
||||||
if not formats and 'data-video-geoblocking="true"' in webpage:
|
if not formats and 'data-video-geoblocking="true"' in webpage:
|
||||||
self.raise_geo_restricted('This video is only available in Belgium')
|
self.raise_geo_restricted('This video is only available in Belgium')
|
||||||
|
Loading…
Reference in New Issue
Block a user