about summary refs log tree commit diff
path: root/youtube_dl/downloader
diff options
context:
space:
mode:
authorSergey M․ <dstftw@gmail.com>2017-10-15 06:13:48 +0700
committerSergey M․ <dstftw@gmail.com>2017-10-15 06:13:48 +0700
commit74c42d9ec3c6e0f0f67923fd151ce2531637a3db (patch)
tree6dd137927a43a198c9e4d5c4c714931d8cc044a3 /youtube_dl/downloader
parent5efaf43c93247446c8616454bb3f59b7ae13fcb8 (diff)
downloadyoutube-dl-74c42d9ec3c6e0f0f67923fd151ce2531637a3db.tar.gz
youtube-dl-74c42d9ec3c6e0f0f67923fd151ce2531637a3db.tar.xz
youtube-dl-74c42d9ec3c6e0f0f67923fd151ce2531637a3db.zip
[downloader/hls] Ignore anvato ad fragments (closes #14496)
Diffstat (limited to 'youtube_dl/downloader')
-rw-r--r--youtube_dl/downloader/hls.py28
1 files changed, 24 insertions, 4 deletions
diff --git a/youtube_dl/downloader/hls.py b/youtube_dl/downloader/hls.py
index 46308cf07..7955ca510 100644
--- a/youtube_dl/downloader/hls.py
+++ b/youtube_dl/downloader/hls.py
@@ -75,15 +75,29 @@ class HlsFD(FragmentFD):
                 fd.add_progress_hook(ph)
             return fd.real_download(filename, info_dict)
 
-        total_frags = 0
+        def anvato_ad(s):
+            return s.startswith('#ANVATO-SEGMENT-INFO') and 'type=ad' in s
+
+        media_frags = 0
+        ad_frags = 0
+        ad_frag_next = False
         for line in s.splitlines():
             line = line.strip()
-            if line and not line.startswith('#'):
-                total_frags += 1
+            if not line:
+                continue
+            if line.startswith('#'):
+                if anvato_ad(line):
+                    ad_frags += 1
+                continue
+            if ad_frag_next:
+                ad_frag_next = False
+                continue
+            media_frags += 1
 
         ctx = {
             'filename': filename,
-            'total_frags': total_frags,
+            'total_frags': media_frags,
+            'ad_frags': ad_frags,
         }
 
         self._prepare_and_start_frag_download(ctx)
@@ -101,10 +115,14 @@ class HlsFD(FragmentFD):
         decrypt_info = {'METHOD': 'NONE'}
         byte_range = {}
         frag_index = 0
+        ad_frag_next = False
         for line in s.splitlines():
             line = line.strip()
             if line:
                 if not line.startswith('#'):
+                    if ad_frag_next:
+                        ad_frag_next = False
+                        continue
                     frag_index += 1
                     if frag_index <= ctx['fragment_index']:
                         continue
@@ -175,6 +193,8 @@ class HlsFD(FragmentFD):
                         'start': sub_range_start,
                         'end': sub_range_start + int(splitted_byte_range[0]),
                     }
+                elif anvato_ad(line):
+                    ad_frag_next = True
 
         self._finish_frag_download(ctx)