discontinuity 问题修复

Signed-off-by: liye <liye87@huawei.com>
This commit is contained in:
liye 2024-09-13 22:12:10 +08:00
parent a12e8d8150
commit e53f9bc100
No known key found for this signature in database
GPG Key ID: B75FBEEC7EAAF434
3 changed files with 13 additions and 13 deletions

View File

@ -278,7 +278,7 @@ private:
std::atomic<bool> isDemuxerLoopExecuting_ {false};
std::atomic<bool> isFirstFrameAfterSeek_ {false};
std::atomic<bool> isInterruptNeeded_ {false};
bool isAutoMaintainPts = false;
bool isAutoMaintainPts_ = false;
std::map<uint32_t, std::shared_ptr<MaintainBaseInfo>> maintainBaseInfos_;
};
} // namespace Media

View File

@ -1440,16 +1440,16 @@ Status MediaDemuxer::Start()
Status MediaDemuxer::InitPtsInfo()
{
FALSE_RETURN_V(source_ != nullptr && source_->GetHLSDisContinuity(), Status::OK);
FALSE_RETURN_V(source_ != nullptr && source_->GetHLSDiscontinuity(), Status::OK);
MEDIA_LOG_I("Enable hls disContinuity auto maintain pts");
isAutoMaintainPts_ = true;
for (auto it = bufferQueueMap_.begin(); it != bufferQueueMap_.end(); it++) {
uint32_t trackId = it->first;
if (maintainBaseInfos_[trackInfo] == nullptr) {
maintainBaseInfos_[trackInfo] = std::make_shared<MaintainBaseInfo>();
if (maintainBaseInfos_[trackId] == nullptr) {
maintainBaseInfos_[trackId] = std::make_shared<MaintainBaseInfo>();
}
maintainBaseInfos_[trackInfo]->segmentOffset = INVALID_PTS_DATA;
maintainBaseInfos_[trackInfo]->basePts = INVALID_PTS_DATA;
maintainBaseInfos_[trackId]->segmentOffset = INVALID_PTS_DATA;
maintainBaseInfos_[trackId]->basePts = INVALID_PTS_DATA;
}
return Status::OK;
}
@ -1683,7 +1683,7 @@ bool MediaDemuxer::SelectTrackChangeStream(uint32_t trackId)
shouldCheckSubtitleFramePts_ = true;
}
if (newTrackId == selectTrackTrackID_) {
if (static_cast<uint32_t>(newTrackId) == selectTrackTrackID_) {
isSelectTrack_.store(false);
}
@ -1903,10 +1903,10 @@ Status MediaDemuxer::HandleAutoMaintainPts(uint32_t trackId, std::shared_ptr<AVB
}
int64_t offsetUs = 0;
Plugins::Us2HstTime(baseInfo->segmentOffset, offsetUs);
sample->pts = offsetUs + curPacketPts - baseInfo->basePts;
MEDIA_LOG_I("HandleAutoMaintainPts success, trackId: " PUBLIC_LOG_U32 ", orginal pts: " PUBLI_LOG_D64
", pts: " PUBILC_LOG_D64 ", Offset: " PUBLIC_LOG_D64 ", basePts: " PUBLIC_LOG_D64, trackId,
curPacketPts, sample->pts_, offsetUs, baseInfo->basePts);
sample->pts_ = offsetUs + curPacketPts - baseInfo->basePts;
MEDIA_LOG_I("HandleAutoMaintainPts success, trackId: " PUBLIC_LOG_U32 ", orginal pts: "
PUBLIC_LOG_D64 ", pts: " PUBLIC_LOG_D64 ", Offset: " PUBLIC_LOG_D64 ", basePts: "
PUBLIC_LOG_D64, trackId, curPacketPts, sample->pts_, offsetUs, baseInfo->basePts);
return Status::OK;
}

View File

@ -348,7 +348,7 @@ void HlsMediaDownloader::HandleFfmpegReadback(uint64_t ffmpegOffset)
uint64_t lastTsReadBack = readBack - curTsHaveRead;
readOffset_ = SpliceOffset(readTsIndex_, tsStorageInfo_[readTsIndex_].first - lastTsReadBack);
MEDIA_LOG_I("HLS Read back, last ts, update readTsIndex: " PUBLIC_LOG_U32 " update readOffset: "
PUBLIC_LOG_U64, readTsIndex_, readOffset_);
PUBLIC_LOG_U64, readTsIndex_.load(), readOffset_);
}
}
@ -382,7 +382,7 @@ Status HlsMediaDownloader::CheckPlaylist(unsigned char* buff, ReadDataInfo& read
OnReadCacheBuffer(readDataInfo.realReadLength_);
MEDIA_LOG_D("HLS Read Success: wantReadLength " PUBLIC_LOG_D32 ", realReadLength " PUBLIC_LOG_D32 ", isEos "
PUBLIC_LOG_D32 " readOffset_ " PUBLIC_LOG_U64 " readTsIndex_ " PUBLIC_LOG_U32, readDataInfo.wantReadLength_,
readDataInfo.realReadLength_, readDataInfo.isEos_, readOffset_, readTsIndex_);
readDataInfo.realReadLength_, readDataInfo.isEos_, readOffset_, readTsIndex_.load());
return Status::OK;
}
if (isFinishedPlay && GetCacheBufferSize() == 0 && GetSeekable() == Seekable::SEEKABLE &&