forked from minhngoc25a/youtube-dl
[bbc] extract more and better qulities from Unified Streaming Platform m3u8 manifests
This commit is contained in:
parent
00f4764cb7
commit
0385aa6199
|
@ -44,6 +44,8 @@ class BBCCoUkIE(InfoExtractor):
|
||||||
|
|
||||||
_MEDIASELECTION_NS = 'http://bbc.co.uk/2008/mp/mediaselection'
|
_MEDIASELECTION_NS = 'http://bbc.co.uk/2008/mp/mediaselection'
|
||||||
_EMP_PLAYLIST_NS = 'http://bbc.co.uk/2008/emp/playlist'
|
_EMP_PLAYLIST_NS = 'http://bbc.co.uk/2008/emp/playlist'
|
||||||
|
# Unified Streaming Platform
|
||||||
|
_USP_RE = r'/([^/]+)\.ism(?:\.hlsv2\.ism)?/[^/]+\.m3u8'
|
||||||
|
|
||||||
_NAMESPACES = (
|
_NAMESPACES = (
|
||||||
_MEDIASELECTION_NS,
|
_MEDIASELECTION_NS,
|
||||||
|
@ -55,12 +57,11 @@ class BBCCoUkIE(InfoExtractor):
|
||||||
'url': 'http://www.bbc.co.uk/programmes/b039g8p7',
|
'url': 'http://www.bbc.co.uk/programmes/b039g8p7',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': 'b039d07m',
|
'id': 'b039d07m',
|
||||||
'ext': 'flv',
|
'ext': 'mp4',
|
||||||
'title': 'Leonard Cohen, Kaleidoscope - BBC Radio 4',
|
'title': 'Leonard Cohen, Kaleidoscope - BBC Radio 4',
|
||||||
'description': 'The Canadian poet and songwriter reflects on his musical career.',
|
'description': 'The Canadian poet and songwriter reflects on his musical career.',
|
||||||
},
|
},
|
||||||
'params': {
|
'params': {
|
||||||
# rtmp download
|
|
||||||
'skip_download': True,
|
'skip_download': True,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -92,7 +93,7 @@ class BBCCoUkIE(InfoExtractor):
|
||||||
# rtmp download
|
# rtmp download
|
||||||
'skip_download': True,
|
'skip_download': True,
|
||||||
},
|
},
|
||||||
'skip': 'Currently BBC iPlayer TV programmes are available to play in the UK only',
|
'skip': 'this episode is not currently available',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'url': 'http://www.bbc.co.uk/iplayer/episode/p026c7jt/tomorrows-worlds-the-unearthly-history-of-science-fiction-2-invasion',
|
'url': 'http://www.bbc.co.uk/iplayer/episode/p026c7jt/tomorrows-worlds-the-unearthly-history-of-science-fiction-2-invasion',
|
||||||
|
@ -107,7 +108,7 @@ class BBCCoUkIE(InfoExtractor):
|
||||||
# rtmp download
|
# rtmp download
|
||||||
'skip_download': True,
|
'skip_download': True,
|
||||||
},
|
},
|
||||||
'skip': 'Currently BBC iPlayer TV programmes are available to play in the UK only',
|
'skip': 'this episode is not currently available',
|
||||||
}, {
|
}, {
|
||||||
'url': 'http://www.bbc.co.uk/programmes/b04v20dw',
|
'url': 'http://www.bbc.co.uk/programmes/b04v20dw',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
|
@ -127,13 +128,12 @@ class BBCCoUkIE(InfoExtractor):
|
||||||
'note': 'Audio',
|
'note': 'Audio',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': 'p022h44j',
|
'id': 'p022h44j',
|
||||||
'ext': 'flv',
|
'ext': 'mp4',
|
||||||
'title': 'BBC Proms Music Guides, Rachmaninov: Symphonic Dances',
|
'title': 'BBC Proms Music Guides, Rachmaninov: Symphonic Dances',
|
||||||
'description': "In this Proms Music Guide, Andrew McGregor looks at Rachmaninov's Symphonic Dances.",
|
'description': "In this Proms Music Guide, Andrew McGregor looks at Rachmaninov's Symphonic Dances.",
|
||||||
'duration': 227,
|
'duration': 227,
|
||||||
},
|
},
|
||||||
'params': {
|
'params': {
|
||||||
# rtmp download
|
|
||||||
'skip_download': True,
|
'skip_download': True,
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
|
@ -141,13 +141,12 @@ class BBCCoUkIE(InfoExtractor):
|
||||||
'note': 'Video',
|
'note': 'Video',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': 'p025c103',
|
'id': 'p025c103',
|
||||||
'ext': 'flv',
|
'ext': 'mp4',
|
||||||
'title': 'Reading and Leeds Festival, 2014, Rae Morris - Closer (Live on BBC Three)',
|
'title': 'Reading and Leeds Festival, 2014, Rae Morris - Closer (Live on BBC Three)',
|
||||||
'description': 'Rae Morris performs Closer for BBC Three at Reading 2014',
|
'description': 'Rae Morris performs Closer for BBC Three at Reading 2014',
|
||||||
'duration': 226,
|
'duration': 226,
|
||||||
},
|
},
|
||||||
'params': {
|
'params': {
|
||||||
# rtmp download
|
|
||||||
'skip_download': True,
|
'skip_download': True,
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
|
@ -163,7 +162,7 @@ class BBCCoUkIE(InfoExtractor):
|
||||||
# rtmp download
|
# rtmp download
|
||||||
'skip_download': True,
|
'skip_download': True,
|
||||||
},
|
},
|
||||||
'skip': 'geolocation',
|
'skip': 'this episode is not currently available',
|
||||||
}, {
|
}, {
|
||||||
'url': 'http://www.bbc.co.uk/iplayer/episode/b05zmgwn/royal-academy-summer-exhibition',
|
'url': 'http://www.bbc.co.uk/iplayer/episode/b05zmgwn/royal-academy-summer-exhibition',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
|
@ -177,7 +176,7 @@ class BBCCoUkIE(InfoExtractor):
|
||||||
# rtmp download
|
# rtmp download
|
||||||
'skip_download': True,
|
'skip_download': True,
|
||||||
},
|
},
|
||||||
'skip': 'geolocation',
|
'skip': 'this episode is not currently available',
|
||||||
}, {
|
}, {
|
||||||
# iptv-all mediaset fails with geolocation however there is no geo restriction
|
# iptv-all mediaset fails with geolocation however there is no geo restriction
|
||||||
# for this programme at all
|
# for this programme at all
|
||||||
|
@ -192,18 +191,17 @@ class BBCCoUkIE(InfoExtractor):
|
||||||
# rtmp download
|
# rtmp download
|
||||||
'skip_download': True,
|
'skip_download': True,
|
||||||
},
|
},
|
||||||
'skip': 'Now it\'s really geo-restricted',
|
'skip': 'this episode is not currently available on BBC iPlayer Radio',
|
||||||
}, {
|
}, {
|
||||||
# compact player (https://github.com/rg3/youtube-dl/issues/8147)
|
# compact player (https://github.com/rg3/youtube-dl/issues/8147)
|
||||||
'url': 'http://www.bbc.co.uk/programmes/p028bfkf/player',
|
'url': 'http://www.bbc.co.uk/programmes/p028bfkf/player',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': 'p028bfkj',
|
'id': 'p028bfkj',
|
||||||
'ext': 'flv',
|
'ext': 'mp4',
|
||||||
'title': 'Extract from BBC documentary Look Stranger - Giant Leeks and Magic Brews',
|
'title': 'Extract from BBC documentary Look Stranger - Giant Leeks and Magic Brews',
|
||||||
'description': 'Extract from BBC documentary Look Stranger - Giant Leeks and Magic Brews',
|
'description': 'Extract from BBC documentary Look Stranger - Giant Leeks and Magic Brews',
|
||||||
},
|
},
|
||||||
'params': {
|
'params': {
|
||||||
# rtmp download
|
|
||||||
'skip_download': True,
|
'skip_download': True,
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
|
@ -248,9 +246,15 @@ class BBCCoUkIE(InfoExtractor):
|
||||||
elif transfer_format == 'dash':
|
elif transfer_format == 'dash':
|
||||||
pass
|
pass
|
||||||
elif transfer_format == 'hls':
|
elif transfer_format == 'hls':
|
||||||
formats.extend(self._extract_m3u8_formats(
|
is_unified_streaming = re.search(self._USP_RE, href)
|
||||||
|
if is_unified_streaming:
|
||||||
|
href = re.sub(self._USP_RE, r'/\1.ism/\1.m3u8', href)
|
||||||
|
m3u8_formats = self._extract_m3u8_formats(
|
||||||
href, programme_id, ext='mp4', entry_protocol='m3u8_native',
|
href, programme_id, ext='mp4', entry_protocol='m3u8_native',
|
||||||
m3u8_id=supplier, fatal=False))
|
m3u8_id=supplier, fatal=False)
|
||||||
|
if is_unified_streaming:
|
||||||
|
self._check_formats(m3u8_formats, programme_id)
|
||||||
|
formats.extend(m3u8_formats)
|
||||||
# Direct link
|
# Direct link
|
||||||
else:
|
else:
|
||||||
formats.append({
|
formats.append({
|
||||||
|
@ -305,13 +309,14 @@ class BBCCoUkIE(InfoExtractor):
|
||||||
for connection in self._extract_connections(media):
|
for connection in self._extract_connections(media):
|
||||||
conn_formats = self._extract_connection(connection, programme_id)
|
conn_formats = self._extract_connection(connection, programme_id)
|
||||||
for format in conn_formats:
|
for format in conn_formats:
|
||||||
format.update({
|
if format.get('protocol') != 'm3u8_native':
|
||||||
'width': width,
|
format.update({
|
||||||
'height': height,
|
'width': width,
|
||||||
'vbr': vbr,
|
'height': height,
|
||||||
'vcodec': vcodec,
|
'vbr': vbr,
|
||||||
'filesize': file_size,
|
'vcodec': vcodec,
|
||||||
})
|
'filesize': file_size,
|
||||||
|
})
|
||||||
if service:
|
if service:
|
||||||
format['format_id'] = '%s_%s' % (service, format['format_id'])
|
format['format_id'] = '%s_%s' % (service, format['format_id'])
|
||||||
formats.extend(conn_formats)
|
formats.extend(conn_formats)
|
||||||
|
|
Loading…
Reference in New Issue