From 0045d405a5769829fb53a24b7ab04e08da045c52 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Thu, 25 Oct 2018 23:17:30 +0800 Subject: [PATCH] =?UTF-8?q?Track=E5=AF=B9=E8=B1=A1=E6=96=B0=E5=A2=9Eclone?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Player/Track.h | 12 ++++++++++++ src/RtspMuxer/RtspMuxer.cpp | 5 +++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Player/Track.h b/src/Player/Track.h index 231a663d..2ef2c85e 100644 --- a/src/Player/Track.h +++ b/src/Player/Track.h @@ -48,6 +48,12 @@ public: * @return */ virtual bool ready() = 0; + + /** + * 克隆接口,用于复制本对象用 + * @return + */ + virtual Track::Ptr clone() = 0; }; class VideoTrack : public Track { @@ -245,6 +251,9 @@ private: void parseSps(const string &sps){ getAVCInfo(sps,_width,_height,_fps); } + Track::Ptr clone() override { + return std::make_shared::type >(*this); + } private: string _sps; string _pps; @@ -369,6 +378,9 @@ private: makeAdtsHeader(aac_cfg,aacFrame); getAACInfo(aacFrame,_sampleRate,_channel); } + Track::Ptr clone() override { + return std::make_shared::type >(*this); + } private: string _cfg; int _sampleRate = 0; diff --git a/src/RtspMuxer/RtspMuxer.cpp b/src/RtspMuxer/RtspMuxer.cpp index e420300e..3a9c6a65 100644 --- a/src/RtspMuxer/RtspMuxer.cpp +++ b/src/RtspMuxer/RtspMuxer.cpp @@ -29,8 +29,9 @@ namespace mediakit { -void RtspMuxer::addTrack(const Track::Ptr &track, uint32_t ssrc, int mtu) { - //记录该Track +void RtspMuxer::addTrack(const Track::Ptr &track_in, uint32_t ssrc, int mtu) { + //克隆对象,防止在setDelegate时错误覆盖 + auto track = track_in->clone(); auto codec_id = track->getCodecId(); _track_map[codec_id] = track;