diff --git a/framework/demuxer/play_list/HLSStream.cpp b/framework/demuxer/play_list/HLSStream.cpp index 060a6860a..0d604246d 100644 --- a/framework/demuxer/play_list/HLSStream.cpp +++ b/framework/demuxer/play_list/HLSStream.cpp @@ -266,7 +266,7 @@ namespace Cicada { mPTracker->setCurSegNum(mPTracker->getFirstSegNum()); } - if (mPTracker->isLive()) { + if (mPTracker->isLive() && !mPTracker->isSeeked()) { uint64_t curNum; if (mOpts) { string value = mOpts->get("liveStartIndex"); diff --git a/framework/demuxer/play_list/SegmentTracker.cpp b/framework/demuxer/play_list/SegmentTracker.cpp index e3728a22a..b11ad25de 100644 --- a/framework/demuxer/play_list/SegmentTracker.cpp +++ b/framework/demuxer/play_list/SegmentTracker.cpp @@ -388,6 +388,7 @@ namespace Cicada { mCurSegPos = position; AF_LOGD("1206, setCurSegPosition %llu\n", mCurSegPos); } + mSeeked = true; } } diff --git a/framework/demuxer/play_list/SegmentTracker.h b/framework/demuxer/play_list/SegmentTracker.h index 4f451e168..d17a839df 100644 --- a/framework/demuxer/play_list/SegmentTracker.h +++ b/framework/demuxer/play_list/SegmentTracker.h @@ -51,6 +51,7 @@ namespace Cicada { void setCurSegNum(uint64_t num) { + mSeeked = true; mCurSegNum = num; } @@ -79,6 +80,11 @@ namespace Cicada { int GetRemainSegmentCount(); + bool isSeeked() + { + return mSeeked.load(); + } + private: int loadPlayList(); @@ -112,6 +118,8 @@ namespace Cicada { std::recursive_mutex mMutex; std::atomic_int mPlayListStatus{0}; + + std::atomic_bool mSeeked{false}; }; }