mirror of
https://gitee.com/openharmony/multimedia_av_codec
synced 2024-10-07 06:04:54 +00:00
discontinuity 问题修复
Signed-off-by: liye <liye87@huawei.com>
This commit is contained in:
parent
a12e8d8150
commit
e53f9bc100
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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 &&
|
||||
|
Loading…
Reference in New Issue
Block a user