diff --git a/src/Rtp/RtpProcess.cpp b/src/Rtp/RtpProcess.cpp index 1713574c..64a4b197 100644 --- a/src/Rtp/RtpProcess.cpp +++ b/src/Rtp/RtpProcess.cpp @@ -176,11 +176,7 @@ int RtpProcess::totalReaderCount() { } void RtpProcess::setListener(const std::weak_ptr &listener) { - if (_muxer) { - _muxer->setMediaListener(listener); - } else { - _listener = listener; - } + setDelegate(listener); } void RtpProcess::emitOnPublish() { @@ -195,7 +191,7 @@ void RtpProcess::emitOnPublish() { strongSelf->_media_info._app, strongSelf->_media_info._streamid, 0, true, true, enableHls, enableMP4); - strongSelf->_muxer->setMediaListener(strongSelf->_listener); + strongSelf->_muxer->setMediaListener(strongSelf); InfoP(strongSelf) << "允许RTP推流"; } else { WarnP(strongSelf) << "禁止RTP推流:" << err; @@ -212,5 +208,17 @@ void RtpProcess::emitOnPublish() { } } +MediaOriginType RtpProcess::getOriginType(MediaSource &sender) const{ + return MediaOriginType::rtp_push; +} + +string RtpProcess::getOriginUrl(MediaSource &sender) const { + return _media_info._full_url; +} + +std::shared_ptr RtpProcess::getOriginSock(MediaSource &sender) const{ + return const_cast(this)->shared_from_this(); +} + }//namespace mediakit #endif//defined(ENABLE_RTPPROXY) \ No newline at end of file diff --git a/src/Rtp/RtpProcess.h b/src/Rtp/RtpProcess.h index 807a3e49..7dfc9c7e 100644 --- a/src/Rtp/RtpProcess.h +++ b/src/Rtp/RtpProcess.h @@ -19,7 +19,7 @@ using namespace mediakit; namespace mediakit { -class RtpProcess : public SockInfo, public MediaSinkInterface, public std::enable_shared_from_this{ +class RtpProcess : public SockInfo, public MediaSinkInterface, public MediaSourceEventInterceptor, public std::enable_shared_from_this{ public: typedef std::shared_ptr Ptr; friend class RtpProcessHelper; @@ -68,6 +68,11 @@ protected: void addTrack(const Track::Ptr & track) override; void resetTracks() override {}; + //// MediaSourceEvent override //// + MediaOriginType getOriginType(MediaSource &sender) const override; + string getOriginUrl(MediaSource &sender) const override; + std::shared_ptr getOriginSock(MediaSource &sender) const override; + private: void emitOnPublish(); @@ -81,7 +86,6 @@ private: function _on_detach; std::shared_ptr _save_file_rtp; std::shared_ptr _save_file_video; - std::weak_ptr _listener; ProcessInterface::Ptr _process; MultiMediaSourceMuxer::Ptr _muxer; }; diff --git a/src/Rtp/RtpSelector.cpp b/src/Rtp/RtpSelector.cpp index 0f4196c5..a589f843 100644 --- a/src/Rtp/RtpSelector.cpp +++ b/src/Rtp/RtpSelector.cpp @@ -154,18 +154,6 @@ int RtpProcessHelper::totalReaderCount(MediaSource &sender) { return _process ? _process->totalReaderCount() : sender.totalReaderCount(); } -MediaOriginType RtpProcessHelper::getOriginType(MediaSource &sender) const{ - return MediaOriginType::rtp_push; -} - -string RtpProcessHelper::getOriginUrl(MediaSource &sender) const { - return _process ? _process->_media_info._full_url : ""; -} - -std::shared_ptr RtpProcessHelper::getOriginSock(MediaSource &sender) const{ - return _process; -} - RtpProcess::Ptr &RtpProcessHelper::getProcess() { return _process; } diff --git a/src/Rtp/RtpSelector.h b/src/Rtp/RtpSelector.h index 54be19ca..fbe61e9c 100644 --- a/src/Rtp/RtpSelector.h +++ b/src/Rtp/RtpSelector.h @@ -34,12 +34,6 @@ protected: bool close(MediaSource &sender,bool force) override; // 观看总人数 int totalReaderCount(MediaSource &sender) override; - // 获取媒体源类型 - MediaOriginType getOriginType(MediaSource &sender) const override; - // 获取媒体源url或者文件路径 - string getOriginUrl(MediaSource &sender) const override; - // 获取媒体源客户端相关信息 - std::shared_ptr getOriginSock(MediaSource &sender) const override; private: weak_ptr _parent;