diff --git a/src/Record/MP4Reader.cpp b/src/Record/MP4Reader.cpp index b5d43aee..a69ab28f 100644 --- a/src/Record/MP4Reader.cpp +++ b/src/Record/MP4Reader.cpp @@ -59,17 +59,15 @@ bool MP4Reader::readSample() { bool keyFrame = false; bool eof = false; - while (!eof) { + while (!eof && _last_dts < getCurrentStamp()) { auto frame = _demuxer->readFrame(keyFrame, eof); if (!frame) { continue; } + _last_dts = frame->dts(); if (_muxer) { _muxer->inputFrame(frame); } - if (frame->dts() > getCurrentStamp()) { - break; - } } GET_CONFIG(bool, fileRepeat, Record::kFileRepeat); @@ -129,6 +127,7 @@ uint32_t MP4Reader::getCurrentStamp() { void MP4Reader::setCurrentStamp(uint32_t new_stamp){ auto old_stamp = getCurrentStamp(); _seek_to = new_stamp; + _last_dts = new_stamp; _seek_ticker.resetTime(); if (old_stamp != new_stamp && _muxer) { //时间轴未拖动时不操作 diff --git a/src/Record/MP4Reader.h b/src/Record/MP4Reader.h index 4978e78a..29337235 100644 --- a/src/Record/MP4Reader.h +++ b/src/Record/MP4Reader.h @@ -60,6 +60,7 @@ private: bool _have_video = false; bool _paused = false; float _speed = 1.0; + uint32_t _last_dts = 0; uint32_t _seek_to; string _file_path; recursive_mutex _mtx;