diff --git a/src/Common/MediaSource.cpp b/src/Common/MediaSource.cpp index d34913a3..47987424 100644 --- a/src/Common/MediaSource.cpp +++ b/src/Common/MediaSource.cpp @@ -64,6 +64,7 @@ MediaSource::MediaSource(const string &schema, const string &vhost, const string _app = app; _stream_id = stream_id; _create_stamp = time(NULL); + _default_poller = EventPollerPool::Instance().getPoller(); } MediaSource::~MediaSource() { @@ -222,11 +223,12 @@ int MediaSource::getLossRate(mediakit::TrackType type) { } toolkit::EventPoller::Ptr MediaSource::getOwnerPoller() { + toolkit::EventPoller::Ptr ret; auto listener = _listener.lock(); - if (!listener) { - return nullptr; + if (listener) { + ret = listener->getOwnerPoller(*this); } - return listener->getOwnerPoller(*this); + return ret ? ret : _default_poller; } void MediaSource::onReaderChanged(int size) { diff --git a/src/Common/MediaSource.h b/src/Common/MediaSource.h index 4b0b1f34..ea9da097 100644 --- a/src/Common/MediaSource.h +++ b/src/Common/MediaSource.h @@ -343,6 +343,7 @@ private: std::string _app; std::string _stream_id; std::weak_ptr _listener; + toolkit::EventPoller::Ptr _default_poller; //对象个数统计 toolkit::ObjectStatistic _statistic; }; diff --git a/src/Player/PlayerProxy.cpp b/src/Player/PlayerProxy.cpp index 688befc2..bd50e4bf 100644 --- a/src/Player/PlayerProxy.cpp +++ b/src/Player/PlayerProxy.cpp @@ -185,6 +185,10 @@ std::shared_ptr PlayerProxy::getOriginSock(MediaSource &sender) const return getSockInfo(); } +toolkit::EventPoller::Ptr PlayerProxy::getOwnerPoller(MediaSource &sender) { + return getPoller(); +} + void PlayerProxy::onPlaySuccess() { GET_CONFIG(bool, reset_when_replay, General::kResetWhenRePlay); if (dynamic_pointer_cast(_media_src)) { diff --git a/src/Player/PlayerProxy.h b/src/Player/PlayerProxy.h index 718f76a4..2b192d0d 100644 --- a/src/Player/PlayerProxy.h +++ b/src/Player/PlayerProxy.h @@ -59,6 +59,7 @@ private: MediaOriginType getOriginType(MediaSource &sender) const override; std::string getOriginUrl(MediaSource &sender) const override; std::shared_ptr getOriginSock(MediaSource &sender) const override; + toolkit::EventPoller::Ptr getOwnerPoller(MediaSource &sender) override; void rePlay(const std::string &strUrl,int iFailedCnt); void onPlaySuccess(); diff --git a/src/Rtmp/RtmpSession.cpp b/src/Rtmp/RtmpSession.cpp index 9475fc98..36f8e84b 100644 --- a/src/Rtmp/RtmpSession.cpp +++ b/src/Rtmp/RtmpSession.cpp @@ -598,6 +598,10 @@ std::shared_ptr RtmpSession::getOriginSock(MediaSource &sender) const return const_cast(this)->shared_from_this(); } +toolkit::EventPoller::Ptr RtmpSession::getOwnerPoller(MediaSource &sender) { + return getPoller(); +} + void RtmpSession::setSocketFlags(){ GET_CONFIG(int, merge_write_ms, General::kMergeWriteMS); if (merge_write_ms > 0) { diff --git a/src/Rtmp/RtmpSession.h b/src/Rtmp/RtmpSession.h index 7bce876c..c6367d35 100644 --- a/src/Rtmp/RtmpSession.h +++ b/src/Rtmp/RtmpSession.h @@ -80,6 +80,7 @@ private: std::string getOriginUrl(MediaSource &sender) const override; // 获取媒体源客户端相关信息 std::shared_ptr getOriginSock(MediaSource &sender) const override; + toolkit::EventPoller::Ptr getOwnerPoller(MediaSource &sender) override; void setSocketFlags(); std::string getStreamId(const std::string &str); diff --git a/src/Rtsp/RtspSession.cpp b/src/Rtsp/RtspSession.cpp index f4f8e9f4..01adbd5d 100644 --- a/src/Rtsp/RtspSession.cpp +++ b/src/Rtsp/RtspSession.cpp @@ -1153,6 +1153,10 @@ std::shared_ptr RtspSession::getOriginSock(MediaSource &sender) const return const_cast(this)->shared_from_this(); } +toolkit::EventPoller::Ptr RtspSession::getOwnerPoller(MediaSource &sender) { + return getPoller(); +} + void RtspSession::onBeforeRtpSorted(const RtpPacket::Ptr &rtp, int track_index){ updateRtcpContext(rtp); } diff --git a/src/Rtsp/RtspSession.h b/src/Rtsp/RtspSession.h index b07428aa..3f8ba826 100644 --- a/src/Rtsp/RtspSession.h +++ b/src/Rtsp/RtspSession.h @@ -91,6 +91,7 @@ protected: std::string getOriginUrl(MediaSource &sender) const override; // 获取媒体源客户端相关信息 std::shared_ptr getOriginSock(MediaSource &sender) const override; + toolkit::EventPoller::Ptr getOwnerPoller(MediaSource &sender) override; /////TcpSession override//// ssize_t send(toolkit::Buffer::Ptr pkt) override;