diff --git a/src/Common/MultiMediaSourceMuxer.h b/src/Common/MultiMediaSourceMuxer.h index 147471f4..713fd214 100644 --- a/src/Common/MultiMediaSourceMuxer.h +++ b/src/Common/MultiMediaSourceMuxer.h @@ -49,9 +49,8 @@ public: * @param track 媒体描述 */ void addTrack(const Track::Ptr & track) { - //克隆track的目的是防止inputFrame时由于用的同一个track而导致写入两次数据 - _rtmp->addTrack(track->clone()); - _rtsp->addTrack(track->clone()); + _rtmp->addTrack(track); + _rtsp->addTrack(track); } /** @@ -59,7 +58,6 @@ public: * @param frame 帧数据 */ void inputFrame(const Frame::Ptr &frame) override { - //_rtmp和_rtsp对象不能使用相同的Track,否则会触发两次inputFrame操作 _rtmp->inputFrame(frame); _rtsp->inputFrame(frame); } diff --git a/src/Device/PlayerProxy.cpp b/src/Device/PlayerProxy.cpp index f46d1893..5c4081ad 100644 --- a/src/Device/PlayerProxy.cpp +++ b/src/Device/PlayerProxy.cpp @@ -179,7 +179,7 @@ void PlayerProxy::onPlaySuccess() { auto videoTrack = getTrack(TrackVideo); if(videoTrack){ //添加视频 - _pChn->addTrack(videoTrack->clone()); + _pChn->addTrack(videoTrack); //视频数据写入_pChn videoTrack->addDelegate(_pChn); } @@ -187,7 +187,7 @@ void PlayerProxy::onPlaySuccess() { auto audioTrack = getTrack(TrackAudio); if(audioTrack){ //添加音频 - _pChn->addTrack(audioTrack->clone()); + _pChn->addTrack(audioTrack); //音频数据写入_pChn audioTrack->addDelegate(_pChn); }else if(videoTrack){ diff --git a/src/RtmpMuxer/RtmpMuxer.cpp b/src/RtmpMuxer/RtmpMuxer.cpp index 76be6531..2b19939c 100644 --- a/src/RtmpMuxer/RtmpMuxer.cpp +++ b/src/RtmpMuxer/RtmpMuxer.cpp @@ -28,8 +28,9 @@ namespace mediakit { -void RtmpMuxer::addTrack(const Track::Ptr &track) { - //记录该Track +void RtmpMuxer::addTrack(const Track::Ptr &track_in) { + //克隆Track,只拷贝其数据,不拷贝其数据转发关系 + auto track = track_in->clone(); auto codec_id = track->getCodecId(); _track_map[codec_id] = track; diff --git a/src/RtspMuxer/RtspMuxer.cpp b/src/RtspMuxer/RtspMuxer.cpp index e849b856..3d2d0352 100644 --- a/src/RtspMuxer/RtspMuxer.cpp +++ b/src/RtspMuxer/RtspMuxer.cpp @@ -29,7 +29,9 @@ namespace mediakit { -void RtspMuxer::addTrack(const Track::Ptr &track, uint32_t ssrc, int mtu) { +void RtspMuxer::addTrack(const Track::Ptr &track_in, uint32_t ssrc, int mtu) { + //克隆Track,只拷贝其数据,不拷贝其数据转发关系 + auto track = track_in->clone(); auto codec_id = track->getCodecId(); _track_map[codec_id] = track; if(mtu == 0){