feat: do not use sequence number as record start time

resolve #202
This commit is contained in:
acgnhik 2023-12-24 22:32:47 +08:00
parent 6cd97ab3da
commit 71ca3f84f4

View File

@ -1,5 +1,4 @@
import io import io
from datetime import datetime, timedelta, timezone
from pathlib import PurePath from pathlib import PurePath
from typing import Callable, Optional, Tuple, Union from typing import Callable, Optional, Tuple, Union
@ -10,7 +9,6 @@ from reactivex.disposable import CompositeDisposable, Disposable, SerialDisposab
from blrec.utils.ffprobe import ffprobe from blrec.utils.ffprobe import ffprobe
from ..helpler import sequence_number_of
from .segment_fetcher import InitSectionData, SegmentData from .segment_fetcher import InitSectionData, SegmentData
__all__ = ('SegmentDumper',) __all__ = ('SegmentDumper',)
@ -29,7 +27,6 @@ class SegmentDumper:
self._path: str = '' self._path: str = ''
self._file: Optional[io.BufferedWriter] = None self._file: Optional[io.BufferedWriter] = None
self._filesize: int = 0 self._filesize: int = 0
self._record_start_time: Optional[int] = None
@property @property
def path(self) -> str: def path(self) -> str:
@ -39,10 +36,6 @@ class SegmentDumper:
def filesize(self) -> int: def filesize(self) -> int:
return self._filesize return self._filesize
@property
def record_start_time(self) -> Optional[int]:
return self._record_start_time
@property @property
def file_opened(self) -> Observable[Tuple[str, int]]: def file_opened(self) -> Observable[Tuple[str, int]]:
return self._file_opened return self._file_opened
@ -57,8 +50,7 @@ class SegmentDumper:
return self._dump(source) return self._dump(source)
def _open_file(self) -> None: def _open_file(self) -> None:
assert self._record_start_time is not None path, timestamp = self._path_provider()
path, timestamp = self._path_provider(self._record_start_time)
self._path = str(PurePath(path).with_suffix('.m4s')) self._path = str(PurePath(path).with_suffix('.m4s'))
self._file = open(self._path, 'wb') # type: ignore self._file = open(self._path, 'wb') # type: ignore
logger.debug(f'Opened file: {self._path}') logger.debug(f'Opened file: {self._path}')
@ -80,13 +72,6 @@ class SegmentDumper:
def _update_filesize(self, size: int) -> None: def _update_filesize(self, size: int) -> None:
self._filesize += size self._filesize += size
def _set_record_start_time(self, item: Union[InitSectionData, SegmentData]) -> None:
seq = sequence_number_of(item.segment.uri)
dt = datetime.utcfromtimestamp(seq)
tz = timezone(timedelta(hours=8))
ts = dt.replace(year=datetime.today().year, tzinfo=tz).timestamp()
self._record_start_time = int(ts)
def _must_split_file( def _must_split_file(
self, prev_init_item: Optional[InitSectionData], curr_init_item: InitSectionData self, prev_init_item: Optional[InitSectionData], curr_init_item: InitSectionData
) -> bool: ) -> bool:
@ -159,7 +144,6 @@ class SegmentDumper:
if split_file: if split_file:
self._close_file() self._close_file()
self._reset() self._reset()
self._set_record_start_time(item)
self._open_file() self._open_file()
try: try: