diff --git a/src/Common/MultiMediaSourceMuxer.h b/src/Common/MultiMediaSourceMuxer.h index 713fd214..147471f4 100644 --- a/src/Common/MultiMediaSourceMuxer.h +++ b/src/Common/MultiMediaSourceMuxer.h @@ -49,8 +49,9 @@ public: * @param track 媒体描述 */ void addTrack(const Track::Ptr & track) { - _rtmp->addTrack(track); - _rtsp->addTrack(track); + //克隆track的目的是防止inputFrame时由于用的同一个track而导致写入两次数据 + _rtmp->addTrack(track->clone()); + _rtsp->addTrack(track->clone()); } /** @@ -58,6 +59,7 @@ public: * @param frame 帧数据 */ void inputFrame(const Frame::Ptr &frame) override { + //_rtmp和_rtsp对象不能使用相同的Track,否则会触发两次inputFrame操作 _rtmp->inputFrame(frame); _rtsp->inputFrame(frame); } diff --git a/src/RtmpMuxer/RtmpCodec.h b/src/RtmpMuxer/RtmpCodec.h index f1f8620c..45e919fe 100644 --- a/src/RtmpMuxer/RtmpCodec.h +++ b/src/RtmpMuxer/RtmpCodec.h @@ -68,7 +68,6 @@ public: typedef std::shared_ptr Ptr; RtmpRing(){ - _rtmpRing = std::make_shared(); } virtual ~RtmpRing(){} @@ -81,7 +80,9 @@ public: } bool inputRtmp(const RtmpPacket::Ptr &rtmp, bool key_pos) override{ - _rtmpRing->write(rtmp,key_pos); + if(_rtmpRing){ + _rtmpRing->write(rtmp,key_pos); + } return key_pos; } protected: diff --git a/src/RtspMuxer/RtpCodec.h b/src/RtspMuxer/RtpCodec.h index 59000af2..6d155a99 100644 --- a/src/RtspMuxer/RtpCodec.h +++ b/src/RtspMuxer/RtpCodec.h @@ -85,7 +85,6 @@ public: typedef std::shared_ptr Ptr; RtpRing(){ - _rtpRing = std::make_shared(); } virtual ~RtpRing(){}