aboutsummaryrefslogtreecommitdiffstats
path: root/youtube_dl/downloader/f4m.py
diff options
context:
space:
mode:
authorYen Chi Hsuan <yan12125@gmail.com>2016-07-03 19:25:40 +0800
committerYen Chi Hsuan <yan12125@gmail.com>2016-07-03 19:26:39 +0800
commit477b7a847479ffea131e2d9a4993fa3f53540e85 (patch)
tree46a514b2922251f3e3690980644c523855d3b392 /youtube_dl/downloader/f4m.py
parent034a884957c4b3d9cb9585f3c0d634d99a3e3389 (diff)
downloadyoutube-dl-477b7a847479ffea131e2d9a4993fa3f53540e85.zip
youtube-dl-477b7a847479ffea131e2d9a4993fa3f53540e85.tar.gz
youtube-dl-477b7a847479ffea131e2d9a4993fa3f53540e85.tar.bz2
[downloader/f4m] Fix for Rai live streams
Diffstat (limited to 'youtube_dl/downloader/f4m.py')
-rw-r--r--youtube_dl/downloader/f4m.py11
1 files changed, 10 insertions, 1 deletions
diff --git a/youtube_dl/downloader/f4m.py b/youtube_dl/downloader/f4m.py
index 8f88b02..80c21d4 100644
--- a/youtube_dl/downloader/f4m.py
+++ b/youtube_dl/downloader/f4m.py
@@ -196,6 +196,11 @@ def build_fragments_list(boot_info):
first_frag_number = fragment_run_entry_table[0]['first']
fragments_counter = itertools.count(first_frag_number)
for segment, fragments_count in segment_run_table['segment_run']:
+ # In some live HDS streams (for example Rai), `fragments_count` is
+ # abnormal and causing out-of-memory errors. It's OK to change the
+ # number of fragments for live streams as they are updated periodically
+ if fragments_count == 4294967295 and boot_info['live']:
+ fragments_count = 2
for _ in range(fragments_count):
res.append((segment, next(fragments_counter)))
@@ -329,7 +334,11 @@ class F4mFD(FragmentFD):
base_url = compat_urlparse.urljoin(man_url, media.attrib['url'])
bootstrap_node = doc.find(_add_ns('bootstrapInfo'))
- boot_info, bootstrap_url = self._parse_bootstrap_node(bootstrap_node, base_url)
+ # From Adobe F4M 3.0 spec:
+ # The <baseURL> element SHALL be the base URL for all relative
+ # (HTTP-based) URLs in the manifest. If <baseURL> is not present, said
+ # URLs should be relative to the location of the containing document.
+ boot_info, bootstrap_url = self._parse_bootstrap_node(bootstrap_node, man_url)
live = boot_info['live']
metadata_node = media.find(_add_ns('metadata'))
if metadata_node is not None: