|
|
@ -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 { |
|
|
|