diff --git a/src/Record/MP4Recorder.cpp b/src/Record/MP4Recorder.cpp index b775da13..7576ba6a 100644 --- a/src/Record/MP4Recorder.cpp +++ b/src/Record/MP4Recorder.cpp @@ -123,11 +123,15 @@ bool MP4Recorder::inputFrame(const Frame::Ptr &frame) { if (!(_have_video && frame->getTrackType() == TrackAudio)) { // 如果有视频且输入的是音频,那么应该忽略切片逻辑 [AUTO-TRANSLATED:fbb15d93] // 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] // In the case of b-frames, the dts timestamp may regress _last_dts = MIN(frame->dts(), _last_dts); } + auto duration = 5u; // 默认至少一帧5ms if (frame->dts() > 0 && frame->dts() > _last_dts) { duration = MAX(duration, frame->dts() - _last_dts);