From affc98f9271ea3b0adc46f4a472d401e99d8776a Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Fri, 26 Oct 2018 22:07:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=86=99=E4=B8=A4=E6=AC=A1Tr?= =?UTF-8?q?ack=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Common/MultiMediaSourceMuxer.h | 6 ++++-- src/RtmpMuxer/RtmpCodec.h | 5 +++-- src/RtspMuxer/RtpCodec.h | 1 - 3 files changed, 7 insertions(+), 5 deletions(-) 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(){}