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;