Compare commits

..

5 Commits

Author SHA1 Message Date
acgnhiki
4f1d6bef27 release: 1.0.4 2021-09-11 10:22:06 +08:00
acgnhiki
230ceb2928 release: v1.0.3 2021-09-07 10:07:10 +08:00
acgnhiki
458bd91d62 release: v1.0.2 2021-08-12 12:44:43 +08:00
acgnhiki
9ef43ac554 release: v1.0.1 2021-08-12 12:07:24 +08:00
acgnhiki
e41cf3181d add funding links 2021-08-11 14:53:29 +08:00
6 changed files with 55 additions and 7 deletions

1
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1 @@
custom: ['https://afdian.net/@acgnhiki']

21
CHANGELOG.md Normal file
View File

@@ -0,0 +1,21 @@
# 更新日志
## 1.0.4
- 兼容 SRT 推流
## 1.0.3
- 修复 bug
## 1.0.2
- 修复版本号没有更新~
## 1.0.1
- 修复了一个小 bug
## 1.0.0
- 第一个正式版发布

View File

@@ -105,6 +105,12 @@
---
## 更新日志
[CHANGELOG](CHANGELOG.md)
---
## 常见问题
### 如何终止程序?

View File

@@ -1,3 +1,3 @@
__version__ = '1.0.0'
__version__ = '1.0.4'
__prog__ = 'blrec'

View File

@@ -231,6 +231,8 @@ class StreamRecorder(
with requests.Session() as self._session:
self._main_loop()
except TryAgain:
pass
except Exception as e:
self._handle_exception(e)
finally:
@@ -248,7 +250,6 @@ class StreamRecorder(
retry_if_exception(lambda e: not isinstance(e, OSError))
),
wait=wait_exponential_for_same_exceptions(max=60),
stop=stop_after_delay(1800),
before_sleep=before_sleep_log(logger, logging.DEBUG, 'main_loop'),
):
with attempt:

View File

@@ -179,7 +179,12 @@ class StreamProcessor:
def _discard_file(self) -> None:
curr_path = self._file_manager.curr_path
self._file_manager.close_file()
if self._analyse_data:
self._data_analyser.reset()
logger.debug(f'discard file: {curr_path}')
def _reset(self) -> None:
@@ -650,6 +655,8 @@ class FlvReaderWithTimestampFix(FlvReader):
def __init__(self, stream: RandomIO) -> None:
super().__init__(stream)
self._last_tag: Optional[FlvTag] = None
self._last_video_tag: Optional[VideoTag] = None
self._last_audio_tag: Optional[AudioTag] = None
self._delta = 0
# 15 is probably the minimal frame rate
self._frame_rate = 15.0
@@ -675,7 +682,7 @@ class FlvReaderWithTimestampFix(FlvReader):
if self._last_tag is None:
if is_data_tag(tag):
self._update_last_tag(tag)
self._update_last_tags(tag)
elif is_metadata_tag(tag):
self._update_parameters(tag)
return tag
@@ -696,7 +703,7 @@ class FlvReaderWithTimestampFix(FlvReader):
f'current tag: {tag}'
)
self._update_last_tag(tag)
self._update_last_tags(tag)
return self._correct_ts(tag)
@@ -716,8 +723,16 @@ class FlvReaderWithTimestampFix(FlvReader):
return min(self._sound_sample_interval, self._video_frame_interval)
def _is_ts_rebounded(self, tag: FlvTag) -> bool:
assert self._last_tag is not None
return tag.timestamp < self._last_tag.timestamp
if is_video_tag(tag):
if self._last_video_tag is None:
return False
return tag.timestamp < self._last_video_tag.timestamp
elif is_audio_tag(tag):
if self._last_audio_tag is None:
return False
return tag.timestamp < self._last_audio_tag.timestamp
else:
return False
def _is_ts_jumped(self, tag: FlvTag) -> bool:
assert self._last_tag is not None
@@ -726,8 +741,12 @@ class FlvReaderWithTimestampFix(FlvReader):
max(self._sound_sample_interval, self._video_frame_interval)
)
def _update_last_tag(self, tag: FlvTag) -> None:
def _update_last_tags(self, tag: FlvTag) -> None:
self._last_tag = tag
if is_video_tag(tag):
self._last_video_tag = tag
elif is_audio_tag(tag):
self._last_audio_tag = tag
def _update_parameters(self, tag: ScriptTag) -> None:
metadata = parse_metadata(tag)