mirror of
https://github.com/ytdl-org/youtube-dl.git
synced 2024-11-22 10:11:52 +00:00
[generic] Add support for Video.js embeds
This commit is contained in:
parent
b14b2283a0
commit
63d990d285
1 changed files with 56 additions and 0 deletions
|
@ -22,6 +22,8 @@ from ..utils import (
|
||||||
HEADRequest,
|
HEADRequest,
|
||||||
is_html,
|
is_html,
|
||||||
js_to_json,
|
js_to_json,
|
||||||
|
KNOWN_EXTENSIONS,
|
||||||
|
mimetype2ext,
|
||||||
orderedSet,
|
orderedSet,
|
||||||
sanitized_Request,
|
sanitized_Request,
|
||||||
smuggle_url,
|
smuggle_url,
|
||||||
|
@ -1130,6 +1132,22 @@ class GenericIE(InfoExtractor):
|
||||||
'skip_download': True,
|
'skip_download': True,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
# Video.js embed
|
||||||
|
'url': 'http://ortcam.com/solidworks-урок-6-настройка-чертежа_33f9b7351.html',
|
||||||
|
'info_dict': {
|
||||||
|
'id': 'yygqldloqIk',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'SolidWorks. Урок 6 Настройка чертежа',
|
||||||
|
'description': 'md5:baf95267792646afdbf030e4d06b2ab3',
|
||||||
|
'upload_date': '20130314',
|
||||||
|
'uploader': 'PROстое3D',
|
||||||
|
'uploader_id': 'PROstoe3D',
|
||||||
|
},
|
||||||
|
'params': {
|
||||||
|
'skip_download': True,
|
||||||
|
},
|
||||||
|
},
|
||||||
# rtl.nl embed
|
# rtl.nl embed
|
||||||
{
|
{
|
||||||
'url': 'http://www.rtlnieuws.nl/nieuws/buitenland/aanslagen-kopenhagen',
|
'url': 'http://www.rtlnieuws.nl/nieuws/buitenland/aanslagen-kopenhagen',
|
||||||
|
@ -2880,6 +2898,44 @@ class GenericIE(InfoExtractor):
|
||||||
jwplayer_data, video_id, require_title=False, base_url=url)
|
jwplayer_data, video_id, require_title=False, base_url=url)
|
||||||
return merge_dicts(info, info_dict)
|
return merge_dicts(info, info_dict)
|
||||||
|
|
||||||
|
# Video.js embed
|
||||||
|
mobj = re.search(
|
||||||
|
r'(?s)\bvideojs\s*\(.+?\bplayer\.src\s*\(\s*(\[.+?\])\s*\)\s*;',
|
||||||
|
webpage)
|
||||||
|
if mobj is not None:
|
||||||
|
sources = self._parse_json(
|
||||||
|
mobj.group(1), video_id, transform_source=js_to_json,
|
||||||
|
fatal=False) or []
|
||||||
|
formats = []
|
||||||
|
for source in sources:
|
||||||
|
src = source.get('src')
|
||||||
|
if not src or not isinstance(src, compat_str):
|
||||||
|
continue
|
||||||
|
src = compat_urlparse.urljoin(url, src)
|
||||||
|
src_type = source.get('type')
|
||||||
|
if isinstance(src_type, compat_str):
|
||||||
|
src_type = src_type.lower()
|
||||||
|
ext = determine_ext(src).lower()
|
||||||
|
if src_type == 'video/youtube':
|
||||||
|
return self.url_result(src, YoutubeIE.ie_key())
|
||||||
|
if src_type == 'application/dash+xml' or ext == 'mpd':
|
||||||
|
formats.extend(self._extract_mpd_formats(
|
||||||
|
src, video_id, mpd_id='dash', fatal=False))
|
||||||
|
elif src_type == 'application/x-mpegurl' or ext == 'm3u8':
|
||||||
|
formats.extend(self._extract_m3u8_formats(
|
||||||
|
src, video_id, 'mp4', entry_protocol='m3u8_native',
|
||||||
|
m3u8_id='hls', fatal=False))
|
||||||
|
else:
|
||||||
|
formats.append({
|
||||||
|
'url': src,
|
||||||
|
'ext': (mimetype2ext(src_type) or
|
||||||
|
ext if ext in KNOWN_EXTENSIONS else 'mp4'),
|
||||||
|
})
|
||||||
|
if formats:
|
||||||
|
self._sort_formats(formats)
|
||||||
|
info_dict['formats'] = formats
|
||||||
|
return info_dict
|
||||||
|
|
||||||
# Looking for http://schema.org/VideoObject
|
# Looking for http://schema.org/VideoObject
|
||||||
json_ld = self._search_json_ld(
|
json_ld = self._search_json_ld(
|
||||||
webpage, video_id, default={}, expected_type='VideoObject')
|
webpage, video_id, default={}, expected_type='VideoObject')
|
||||||
|
|
Loading…
Reference in a new issue