mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-22 10:40:05 +08:00
Fix mp4 record segment bug (#4008 #4007)
Some checks failed
Android / build (push) Has been cancelled
CodeQL / Analyze (cpp) (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
Docker / build (push) Has been cancelled
Linux / build (push) Has been cancelled
macOS / build (push) Has been cancelled
Windows / build (push) Has been cancelled
Some checks failed
Android / build (push) Has been cancelled
CodeQL / Analyze (cpp) (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
Docker / build (push) Has been cancelled
Linux / build (push) Has been cancelled
macOS / build (push) Has been cancelled
Windows / build (push) Has been cancelled
This commit is contained in:
parent
8e823b3b74
commit
51f49d3a89
@ -123,11 +123,15 @@ bool MP4Recorder::inputFrame(const Frame::Ptr &frame) {
|
|||||||
if (!(_have_video && frame->getTrackType() == TrackAudio)) {
|
if (!(_have_video && frame->getTrackType() == TrackAudio)) {
|
||||||
// 如果有视频且输入的是音频,那么应该忽略切片逻辑 [AUTO-TRANSLATED:fbb15d93]
|
// 如果有视频且输入的是音频,那么应该忽略切片逻辑 [AUTO-TRANSLATED:fbb15d93]
|
||||||
// If there is video and the input is audio, then the slice logic should be ignored
|
// If there is video and the input is audio, then the slice logic should be ignored
|
||||||
if (_last_dts == 0 || _last_dts > frame->dts()) {
|
if (_last_dts == 0) {
|
||||||
|
// first frame assign dts
|
||||||
|
_last_dts = frame->dts();
|
||||||
|
} else if (_last_dts > frame->dts()) {
|
||||||
// b帧情况下dts时间戳可能回退 [AUTO-TRANSLATED:1de38f77]
|
// b帧情况下dts时间戳可能回退 [AUTO-TRANSLATED:1de38f77]
|
||||||
// In the case of b-frames, the dts timestamp may regress
|
// In the case of b-frames, the dts timestamp may regress
|
||||||
_last_dts = MIN(frame->dts(), _last_dts);
|
_last_dts = MIN(frame->dts(), _last_dts);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto duration = 5u; // 默认至少一帧5ms
|
auto duration = 5u; // 默认至少一帧5ms
|
||||||
if (frame->dts() > 0 && frame->dts() > _last_dts) {
|
if (frame->dts() > 0 && frame->dts() > _last_dts) {
|
||||||
duration = MAX(duration, frame->dts() - _last_dts);
|
duration = MAX(duration, frame->dts() - _last_dts);
|
||||||
|
Loading…
Reference in New Issue
Block a user