diff --git a/src/Rtp/Decoder.cpp b/src/Rtp/Decoder.cpp index 778541a9..5274c11d 100644 --- a/src/Rtp/Decoder.cpp +++ b/src/Rtp/Decoder.cpp @@ -85,6 +85,9 @@ DecoderImp::DecoderImp(const Decoder::Ptr &decoder, MediaSinkInterface *sink){ #if defined(ENABLE_RTPPROXY) || defined(ENABLE_HLS) void DecoderImp::onStream(int stream, int codecid, const void *extra, size_t bytes, int finish) { + if (_finished) { + return; + } // G711传统只支持 8000/1/16的规格,FFmpeg貌似做了扩展,但是这里不管它了 auto track = Factory::getTrackByCodecId(getCodecByMpegId(codecid), 8000, 1, 16); if (track) { @@ -92,6 +95,7 @@ void DecoderImp::onStream(int stream, int codecid, const void *extra, size_t byt } // 防止未获取视频track提前complete导致忽略后续视频的问题,用于兼容一些不太规范的ps流 if (finish && _have_video) { + _finished = true; _sink->addTrackCompleted(); InfoL << "Add track finished"; } diff --git a/src/Rtp/Decoder.h b/src/Rtp/Decoder.h index 9da460c4..4902157c 100644 --- a/src/Rtp/Decoder.h +++ b/src/Rtp/Decoder.h @@ -57,6 +57,7 @@ private: void onStream(int stream, int codecid, const void *extra, size_t bytes, int finish); private: + bool _finished = false; bool _have_video = false; Decoder::Ptr _decoder; MediaSinkInterface *_sink;