diff options
| -rw-r--r-- | youtube_dl/downloader/f4m.py | 11 | 
1 files changed, 10 insertions, 1 deletions
| diff --git a/youtube_dl/downloader/f4m.py b/youtube_dl/downloader/f4m.py index 8f88b0241..80c21d40b 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: | 
