|
@ -4,9 +4,8 @@ import re |
|
|
|
|
|
|
|
|
from .common import InfoExtractor |
|
|
from .common import InfoExtractor |
|
|
from ..utils import ( |
|
|
from ..utils import ( |
|
|
xpath_text, |
|
|
|
|
|
|
|
|
dict_get, |
|
|
float_or_none, |
|
|
float_or_none, |
|
|
int_or_none, |
|
|
|
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -23,6 +22,7 @@ class PlaywireIE(InfoExtractor): |
|
|
'duration': 145.94, |
|
|
'duration': 145.94, |
|
|
}, |
|
|
}, |
|
|
}, { |
|
|
}, { |
|
|
|
|
|
# Multiple resolutions while bitrates missing |
|
|
'url': 'http://cdn.playwire.com/11625/embed/85228.html', |
|
|
'url': 'http://cdn.playwire.com/11625/embed/85228.html', |
|
|
'only_matching': True, |
|
|
'only_matching': True, |
|
|
}, { |
|
|
}, { |
|
@ -48,25 +48,10 @@ class PlaywireIE(InfoExtractor): |
|
|
thumbnail = content.get('poster') |
|
|
thumbnail = content.get('poster') |
|
|
src = content['media']['f4m'] |
|
|
src = content['media']['f4m'] |
|
|
|
|
|
|
|
|
f4m = self._download_xml(src, video_id) |
|
|
|
|
|
base_url = xpath_text(f4m, './{http://ns.adobe.com/f4m/1.0}baseURL', 'base url', fatal=True) |
|
|
|
|
|
formats = [] |
|
|
|
|
|
for media in f4m.findall('./{http://ns.adobe.com/f4m/1.0}media'): |
|
|
|
|
|
media_url = media.get('url') |
|
|
|
|
|
if not media_url: |
|
|
|
|
|
continue |
|
|
|
|
|
tbr = int_or_none(media.get('bitrate')) |
|
|
|
|
|
width = int_or_none(media.get('width')) |
|
|
|
|
|
height = int_or_none(media.get('height')) |
|
|
|
|
|
f = { |
|
|
|
|
|
'url': '%s/%s' % (base_url, media.attrib['url']), |
|
|
|
|
|
'tbr': tbr, |
|
|
|
|
|
'width': width, |
|
|
|
|
|
'height': height, |
|
|
|
|
|
} |
|
|
|
|
|
if not (tbr or width or height): |
|
|
|
|
|
f['quality'] = 1 if '-hd.' in media_url else 0 |
|
|
|
|
|
formats.append(f) |
|
|
|
|
|
|
|
|
formats = self._extract_f4m_formats(src, video_id, assume_f4mv2=True) |
|
|
|
|
|
for a_format in formats: |
|
|
|
|
|
if not dict_get(a_format, ['tbr', 'width', 'height']): |
|
|
|
|
|
a_format['quality'] = 1 if '-hd.' in a_format['url'] else 0 |
|
|
self._sort_formats(formats) |
|
|
self._sort_formats(formats) |
|
|
|
|
|
|
|
|
return { |
|
|
return { |
|
|