|
@@ -22,6 +22,8 @@ from ..utils import (
|
|
|
HEADRequest,
|
|
|
is_html,
|
|
|
js_to_json,
|
|
|
+ KNOWN_EXTENSIONS,
|
|
|
+ mimetype2ext,
|
|
|
orderedSet,
|
|
|
sanitized_Request,
|
|
|
smuggle_url,
|
|
@@ -1130,6 +1132,22 @@ class GenericIE(InfoExtractor):
|
|
|
'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
|
|
|
{
|
|
|
'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)
|
|
|
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
|
|
|
json_ld = self._search_json_ld(
|
|
|
webpage, video_id, default={}, expected_type='VideoObject')
|