修复ts/ps解析可能addTrackCompleted的bug

This commit is contained in:
xia-chu 2023-12-09 22:10:19 +08:00
parent c433827c66
commit ccd1ef7f92
2 changed files with 9 additions and 5 deletions

View File

@ -92,7 +92,7 @@ void DecoderImp::onStream(int stream, int codecid, const void *extra, size_t byt
} }
onTrack(stream, std::move(track)); onTrack(stream, std::move(track));
// 防止未获取视频track提前complete导致忽略后续视频的问题用于兼容一些不太规范的ps流 // 防止未获取视频track提前complete导致忽略后续视频的问题用于兼容一些不太规范的ps流
if (finish && _tracks[stream].first) { if (finish && _have_video) {
_sink->addTrackCompleted(); _sink->addTrackCompleted();
InfoL << "Add track finished"; InfoL << "Add track finished";
} }
@ -130,11 +130,14 @@ void DecoderImp::onTrack(int index, const Track::Ptr &track) {
} }
track->setIndex(index); track->setIndex(index);
auto &ref = _tracks[index]; auto &ref = _tracks[index];
if (!ref.first) { if (ref.first) {
ref.first = track; WarnL << "Already existed a same track: " << index << ", codec: " << track->getCodecName();
_sink->addTrack(track); return;
InfoL << "Got track: " << track->getCodecName();
} }
ref.first = track;
_sink->addTrack(track);
InfoL << "Got track: " << track->getCodecName();
_have_video = track->getTrackType() == TrackVideo ? true : _have_video;
} }
void DecoderImp::onFrame(int index, const Frame::Ptr &frame) { void DecoderImp::onFrame(int index, const Frame::Ptr &frame) {

View File

@ -57,6 +57,7 @@ private:
void onStream(int stream, int codecid, const void *extra, size_t bytes, int finish); void onStream(int stream, int codecid, const void *extra, size_t bytes, int finish);
private: private:
bool _have_video = false;
Decoder::Ptr _decoder; Decoder::Ptr _decoder;
MediaSinkInterface *_sink; MediaSinkInterface *_sink;