diff --git a/src/blrec/hls/operators/playlist_dumper.py b/src/blrec/hls/operators/playlist_dumper.py index f5fdd39..d197fa9 100644 --- a/src/blrec/hls/operators/playlist_dumper.py +++ b/src/blrec/hls/operators/playlist_dumper.py @@ -4,10 +4,11 @@ import io from copy import deepcopy from decimal import Decimal from pathlib import PurePath -from typing import Optional, Tuple, Union +from typing import Optional, Tuple, Union, cast import m3u8 from loguru import logger +from m3u8.model import InitializationSection from reactivex import Observable, Subject, abc from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposable @@ -139,7 +140,9 @@ class PlaylistDumper: ) -> m3u8.Segment: seg = deepcopy(segment) if init_section := getattr(seg, 'init_section', None): + init_section = cast(InitializationSection, init_section) init_section.uri = uri + init_section.base_uri = '' init_section.byterange = init_section_byterange seg.uri = uri seg.byterange = segment_byterange diff --git a/src/blrec/hls/operators/segment_dumper.py b/src/blrec/hls/operators/segment_dumper.py index c58f6a5..534c2ef 100644 --- a/src/blrec/hls/operators/segment_dumper.py +++ b/src/blrec/hls/operators/segment_dumper.py @@ -72,6 +72,14 @@ class SegmentDumper: def _update_filesize(self, size: int) -> None: self._filesize += size + def _is_redundant( + self, prev_init_item: Optional[InitSectionData], curr_init_item: InitSectionData + ) -> bool: + return ( + prev_init_item is not None + and curr_init_item.payload == prev_init_item.payload + ) + def _must_split_file( self, prev_init_item: Optional[InitSectionData], curr_init_item: InitSectionData ) -> bool: @@ -141,6 +149,8 @@ class SegmentDumper: split_file = False if isinstance(item, InitSectionData): + if self._is_redundant(last_init_item, item): + return split_file = self._must_split_file(last_init_item, item) last_init_item = item diff --git a/src/blrec/hls/operators/segment_fetcher.py b/src/blrec/hls/operators/segment_fetcher.py index d01f40d..8edd101 100644 --- a/src/blrec/hls/operators/segment_fetcher.py +++ b/src/blrec/hls/operators/segment_fetcher.py @@ -92,7 +92,6 @@ class SegmentFetcher: ( last_segment is None or seg.init_section != last_segment.init_section - or seg.discontinuity ) ): url = seg.init_section.absolute_uri