|
@@ -75,10 +75,14 @@ class HlsFD(FragmentFD):
|
|
|
fd.add_progress_hook(ph)
|
|
|
return fd.real_download(filename, info_dict)
|
|
|
|
|
|
- def is_ad_fragment(s):
|
|
|
+ def is_ad_fragment_start(s):
|
|
|
return (s.startswith('#ANVATO-SEGMENT-INFO') and 'type=ad' in s or
|
|
|
s.startswith('#UPLYNK-SEGMENT') and s.endswith(',ad'))
|
|
|
|
|
|
+ def is_ad_fragment_end(s):
|
|
|
+ return (s.startswith('#ANVATO-SEGMENT-INFO') and 'type=master' in s or
|
|
|
+ s.startswith('#UPLYNK-SEGMENT') and s.endswith(',segment'))
|
|
|
+
|
|
|
media_frags = 0
|
|
|
ad_frags = 0
|
|
|
ad_frag_next = False
|
|
@@ -87,12 +91,13 @@ class HlsFD(FragmentFD):
|
|
|
if not line:
|
|
|
continue
|
|
|
if line.startswith('#'):
|
|
|
- if is_ad_fragment(line):
|
|
|
- ad_frags += 1
|
|
|
+ if is_ad_fragment_start(line):
|
|
|
ad_frag_next = True
|
|
|
+ elif is_ad_fragment_end(line):
|
|
|
+ ad_frag_next = False
|
|
|
continue
|
|
|
if ad_frag_next:
|
|
|
- ad_frag_next = False
|
|
|
+ ad_frags += 1
|
|
|
continue
|
|
|
media_frags += 1
|
|
|
|
|
@@ -123,7 +128,6 @@ class HlsFD(FragmentFD):
|
|
|
if line:
|
|
|
if not line.startswith('#'):
|
|
|
if ad_frag_next:
|
|
|
- ad_frag_next = False
|
|
|
continue
|
|
|
frag_index += 1
|
|
|
if frag_index <= ctx['fragment_index']:
|
|
@@ -196,8 +200,10 @@ class HlsFD(FragmentFD):
|
|
|
'start': sub_range_start,
|
|
|
'end': sub_range_start + int(splitted_byte_range[0]),
|
|
|
}
|
|
|
- elif is_ad_fragment(line):
|
|
|
+ elif is_ad_fragment_start(line):
|
|
|
ad_frag_next = True
|
|
|
+ elif is_ad_fragment_end(line):
|
|
|
+ ad_frag_next = False
|
|
|
|
|
|
self._finish_frag_download(ctx)
|
|
|
|