aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRemita Amine <remitamine@gmail.com>2016-09-16 19:30:38 +0100
committerRemita Amine <remitamine@gmail.com>2016-09-16 19:30:38 +0100
commit6ad0219556cefe60239027633193cc9f1dc9fb1d (patch)
treeb467c462d28510454a5199ec7c93f170899ed427
parent98b7506e96b5ac107a777d8bb8900623d832fba4 (diff)
[common] add helper method for Wowza Streaming Engine format extraction
-rw-r--r--youtube_dl/extractor/common.py43
-rw-r--r--youtube_dl/extractor/vier.py4
-rw-r--r--youtube_dl/extractor/vodplatform.py25
-rw-r--r--youtube_dl/extractor/vrt.py40
4 files changed, 55 insertions, 57 deletions
diff --git a/youtube_dl/extractor/common.py b/youtube_dl/extractor/common.py
index 4f738b9fc..c00023458 100644
--- a/youtube_dl/extractor/common.py
+++ b/youtube_dl/extractor/common.py
@@ -1795,6 +1795,49 @@ class InfoExtractor(object):
m3u8_id='hls', fatal=False))
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):
""" Generate the title for a live video """
now = datetime.datetime.now()
diff --git a/youtube_dl/extractor/vier.py b/youtube_dl/extractor/vier.py
index 6645c6186..dc142a245 100644
--- a/youtube_dl/extractor/vier.py
+++ b/youtube_dl/extractor/vier.py
@@ -48,8 +48,8 @@ class VierIE(InfoExtractor):
[r'data-filename="([^"]+)"', r'"filename"\s*:\s*"([^"]+)"'],
webpage, 'filename')
- playlist_url = 'http://vod.streamcloud.be/%s/mp4:_definst_/%s.mp4/playlist.m3u8' % (application, filename)
- formats = self._extract_m3u8_formats(playlist_url, display_id, 'mp4')
+ playlist_url = 'http://vod.streamcloud.be/%s/_definst_/mp4:%s.mp4/playlist.m3u8' % (application, filename)
+ formats = self._extract_wowza_formats(playlist_url, display_id)
self._sort_formats(formats)
title = self._og_search_title(webpage, default=display_id)
diff --git a/youtube_dl/extractor/vodplatform.py b/youtube_dl/extractor/vodplatform.py
index 7bdd8b1dc..239644340 100644
--- a/youtube_dl/extractor/vodplatform.py
+++ b/youtube_dl/extractor/vodplatform.py
@@ -25,29 +25,8 @@ class VODPlatformIE(InfoExtractor):
title = unescapeHTML(self._og_search_title(webpage))
hidden_inputs = self._hidden_inputs(webpage)
- base_url = self._search_regex(
- '(.*/)(?:playlist.m3u8|manifest.mpd)',
- 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])
+ formats = self._extract_wowza_formats(
+ hidden_inputs.get('HiddenmyhHlsLink') or hidden_inputs['HiddenmyDashLink'], video_id, skip_protocols=['f4m', 'smil'])
self._sort_formats(formats)
return {
diff --git a/youtube_dl/extractor/vrt.py b/youtube_dl/extractor/vrt.py
index bec7ab327..00c72e346 100644
--- a/youtube_dl/extractor/vrt.py
+++ b/youtube_dl/extractor/vrt.py
@@ -5,7 +5,6 @@ import re
from .common import InfoExtractor
from ..utils import (
- determine_ext,
float_or_none,
)
@@ -75,7 +74,6 @@ class VRTIE(InfoExtractor):
},
{
'url': 'http://cobra.canvas.be/cm/cobra/videozone/rubriek/film-videozone/1.2377055',
- 'md5': '',
'info_dict': {
'id': '2377055',
'ext': 'mp4',
@@ -119,39 +117,17 @@ class VRTIE(InfoExtractor):
video_id, 'mp4', m3u8_id='hls', fatal=False))
if src:
- if determine_ext(src) == 'm3u8':
- formats.extend(self._extract_m3u8_formats(
- src, video_id, 'mp4', entry_protocol='m3u8_native',
- m3u8_id='hls', fatal=False))
- formats.extend(self._extract_f4m_formats(
- 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()
+ formats = self._extract_wowza_formats(src, video_id)
+ if 'data-video-geoblocking="true"' not in webpage:
+ for f in formats:
+ if f['url'].startswith('rtsp://'):
+ http_format = f.copy()
http_format.update({
- 'url': rtmp_format_c['url'].replace('rtmp://', 'http://').replace('vod.', 'download.').replace('/_definst_/', '/').replace('mp4:', ''),
- 'format_id': rtmp_format['format_id'].replace('rtmp', 'http'),
+ 'url': f['url'].replace('rtsp://', 'http://').replace('vod.', 'download.').replace('/_definst_/', '/').replace('mp4:', ''),
+ 'format_id': f['format_id'].replace('rtsp', 'http'),
'protocol': 'http',
})
- rtsp_format = rtmp_format_c.copy()
- 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))
+ formats.append(http_format)
if not formats and 'data-video-geoblocking="true"' in webpage:
self.raise_geo_restricted('This video is only available in Belgium')