|
|
|
@ -2,12 +2,17 @@
|
|
|
|
|
from __future__ import unicode_literals
|
|
|
|
|
|
|
|
|
|
import re
|
|
|
|
|
import base64
|
|
|
|
|
|
|
|
|
|
from .common import InfoExtractor
|
|
|
|
|
from ..compat import compat_urllib_parse
|
|
|
|
|
from ..compat import (
|
|
|
|
|
compat_urllib_parse,
|
|
|
|
|
compat_urlparse,
|
|
|
|
|
)
|
|
|
|
|
from ..utils import (
|
|
|
|
|
ExtractorError,
|
|
|
|
|
int_or_none,
|
|
|
|
|
unsmuggle_url,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -121,24 +126,40 @@ class KalturaIE(InfoExtractor):
|
|
|
|
|
video_id, actions, note='Downloading video info JSON')
|
|
|
|
|
|
|
|
|
|
def _real_extract(self, url):
|
|
|
|
|
url, smuggled_data = unsmuggle_url(url, {})
|
|
|
|
|
|
|
|
|
|
mobj = re.match(self._VALID_URL, url)
|
|
|
|
|
partner_id = mobj.group('partner_id_s') or mobj.group('partner_id') or mobj.group('partner_id_html5')
|
|
|
|
|
entry_id = mobj.group('id_s') or mobj.group('id') or mobj.group('id_html5')
|
|
|
|
|
|
|
|
|
|
info, source_data = self._get_video_info(entry_id, partner_id)
|
|
|
|
|
|
|
|
|
|
formats = [{
|
|
|
|
|
'format_id': '%(fileExt)s-%(bitrate)s' % f,
|
|
|
|
|
'ext': f['fileExt'],
|
|
|
|
|
'tbr': f['bitrate'],
|
|
|
|
|
'fps': f.get('frameRate'),
|
|
|
|
|
'filesize_approx': int_or_none(f.get('size'), invscale=1024),
|
|
|
|
|
'container': f.get('containerFormat'),
|
|
|
|
|
'vcodec': f.get('videoCodecId'),
|
|
|
|
|
'height': f.get('height'),
|
|
|
|
|
'width': f.get('width'),
|
|
|
|
|
'url': '%s/flavorId/%s' % (info['dataUrl'], f['id']),
|
|
|
|
|
} for f in source_data['flavorAssets']]
|
|
|
|
|
source_url = smuggled_data.get('source_url')
|
|
|
|
|
if source_url:
|
|
|
|
|
referrer = base64.b64encode(
|
|
|
|
|
'://'.join(compat_urlparse.urlparse(source_url)[:2])
|
|
|
|
|
.encode('utf-8')).decode('utf-8')
|
|
|
|
|
else:
|
|
|
|
|
referrer = None
|
|
|
|
|
|
|
|
|
|
formats = []
|
|
|
|
|
for f in source_data['flavorAssets']:
|
|
|
|
|
video_url = '%s/flavorId/%s' % (info['dataUrl'], f['id'])
|
|
|
|
|
if referrer:
|
|
|
|
|
video_url += '?referrer=%s' % referrer
|
|
|
|
|
formats.append({
|
|
|
|
|
'format_id': '%(fileExt)s-%(bitrate)s' % f,
|
|
|
|
|
'ext': f['fileExt'],
|
|
|
|
|
'tbr': f['bitrate'],
|
|
|
|
|
'fps': f.get('frameRate'),
|
|
|
|
|
'filesize_approx': int_or_none(f.get('size'), invscale=1024),
|
|
|
|
|
'container': f.get('containerFormat'),
|
|
|
|
|
'vcodec': f.get('videoCodecId'),
|
|
|
|
|
'height': f.get('height'),
|
|
|
|
|
'width': f.get('width'),
|
|
|
|
|
'url': video_url,
|
|
|
|
|
})
|
|
|
|
|
self._check_formats(formats, entry_id)
|
|
|
|
|
self._sort_formats(formats)
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|