From 7f86299c801f618745b04620d97aaf2d342c0145 Mon Sep 17 00:00:00 2001 From: xiongguangjie Date: Wed, 7 Sep 2022 19:10:06 +0800 Subject: [PATCH] rtc stop push unregister mediasource --- webrtc/WebRtcPusher.cpp | 11 +++++++++++ webrtc/WebRtcPusher.h | 3 +++ webrtc/WebRtcTransport.cpp | 3 +++ webrtc/WebRtcTransport.h | 2 ++ 4 files changed, 19 insertions(+) diff --git a/webrtc/WebRtcPusher.cpp b/webrtc/WebRtcPusher.cpp index f73864b3..9d006493 100644 --- a/webrtc/WebRtcPusher.cpp +++ b/webrtc/WebRtcPusher.cpp @@ -150,4 +150,15 @@ void WebRtcPusher::onRtcConfigure(RtcConfigure &configure) const { float WebRtcPusher::getLossRate(MediaSource &sender,mediakit::TrackType type){ return WebRtcTransportImp::getLossRate(type); +} + +void WebRtcPusher::OnDtlsTransportClosed(const RTC::DtlsTransport *dtlsTransport) { + //主动关闭推流,那么不等待重推 + _push_src = nullptr; + WebRtcTransportImp::OnDtlsTransportClosed(dtlsTransport); +} + +void WebRtcPusher::onRtcpBye(){ + _push_src = nullptr; + WebRtcTransportImp::onRtcpBye(); } \ No newline at end of file diff --git a/webrtc/WebRtcPusher.h b/webrtc/WebRtcPusher.h index a3e78e00..f064bd9a 100644 --- a/webrtc/WebRtcPusher.h +++ b/webrtc/WebRtcPusher.h @@ -26,6 +26,9 @@ protected: void onDestory() override; void onRtcConfigure(RtcConfigure &configure) const override; void onRecvRtp(MediaTrack &track, const std::string &rid, mediakit::RtpPacket::Ptr rtp) override; + void onRtcpBye() override; + //// dtls相关的回调 //// + void OnDtlsTransportClosed(const RTC::DtlsTransport *dtlsTransport) override; protected: ///////MediaSourceEvent override/////// diff --git a/webrtc/WebRtcTransport.cpp b/webrtc/WebRtcTransport.cpp index 31bce08c..c1469944 100644 --- a/webrtc/WebRtcTransport.cpp +++ b/webrtc/WebRtcTransport.cpp @@ -766,6 +766,7 @@ void WebRtcTransportImp::onRtcp(const char *buf, size_t len) { } _ssrc_to_track.erase(it); } + onRtcpBye(); onShutdown(SockException(Err_eof, "rtcp bye message received")); break; } @@ -1051,6 +1052,8 @@ uint64_t WebRtcTransportImp::getDuration() const { return _alive_ticker.createdTime() / 1000; } +void WebRtcTransportImp::onRtcpBye(){} + ///////////////////////////////////////////////////////////////////////////////////////////// void WebRtcTransportImp::registerSelf() { diff --git a/webrtc/WebRtcTransport.h b/webrtc/WebRtcTransport.h index 01d842f6..ece9a2b2 100644 --- a/webrtc/WebRtcTransport.h +++ b/webrtc/WebRtcTransport.h @@ -154,6 +154,7 @@ protected: virtual void onShutdown(const SockException &ex) = 0; virtual void onBeforeEncryptRtp(const char *buf, int &len, void *ctx) = 0; virtual void onBeforeEncryptRtcp(const char *buf, int &len, void *ctx) = 0; + virtual void onRtcpBye() = 0; protected: RTC::TransportTuple* getSelectedTuple() const; @@ -264,6 +265,7 @@ protected: virtual void onRecvRtp(MediaTrack &track, const std::string &rid, mediakit::RtpPacket::Ptr rtp) = 0; void updateTicker(); float getLossRate(mediakit::TrackType type); + void onRtcpBye() override; private: void onSortedRtp(MediaTrack &track, const std::string &rid, mediakit::RtpPacket::Ptr rtp);