From 28f8c1ffec320f914ea1362d463cc0dbb71ab648 Mon Sep 17 00:00:00 2001 From: Dw9 Date: Fri, 3 Mar 2023 21:33:05 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=9F=E4=B8=80webrtc=E6=B3=A8=E9=94=80?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=EF=BC=8C=E5=87=8F=E5=B0=91=E9=87=8D=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- webrtc/WebRtcPusher.cpp | 22 ++++++++++------------ webrtc/WebRtcPusher.h | 4 +--- webrtc/WebRtcTransport.cpp | 2 -- webrtc/WebRtcTransport.h | 2 -- 4 files changed, 11 insertions(+), 19 deletions(-) diff --git a/webrtc/WebRtcPusher.cpp b/webrtc/WebRtcPusher.cpp index 8fe6549c..5731c870 100644 --- a/webrtc/WebRtcPusher.cpp +++ b/webrtc/WebRtcPusher.cpp @@ -130,14 +130,21 @@ void WebRtcPusher::onDestory() { } } - if (_push_src && _continue_push_ms) { + WebRtcTransportImp::onDestory(); +} + +void WebRtcPusher::onShutdown(const SockException &ex) { + + if (_push_src && _continue_push_ms && ex.getErrCode() != Err_shutdown) { //取消所有权 _push_src_ownership = nullptr; - //延时10秒注销流 + //延时注销流 auto push_src = std::move(_push_src); getPoller()->doDelayTask(_continue_push_ms, [push_src]() { return 0; }); } - WebRtcTransportImp::onDestory(); + + WebRtcTransportImp::onShutdown(ex); + } void WebRtcPusher::onRtcConfigure(RtcConfigure &configure) const { @@ -150,14 +157,5 @@ float WebRtcPusher::getLossRate(MediaSource &sender,TrackType type){ return WebRtcTransportImp::getLossRate(type); } -void WebRtcPusher::OnDtlsTransportClosed(const RTC::DtlsTransport *dtlsTransport) { - //主动关闭推流,那么不等待重推 - _push_src = nullptr; - WebRtcTransportImp::OnDtlsTransportClosed(dtlsTransport); -} - -void WebRtcPusher::onRtcpBye(){ - WebRtcTransportImp::onRtcpBye(); -} }// namespace mediakit \ No newline at end of file diff --git a/webrtc/WebRtcPusher.h b/webrtc/WebRtcPusher.h index f00e0483..677da8b2 100644 --- a/webrtc/WebRtcPusher.h +++ b/webrtc/WebRtcPusher.h @@ -27,11 +27,9 @@ protected: ///////WebRtcTransportImp override/////// void onStartWebRTC() override; void onDestory() override; + void onShutdown(const SockException &ex) override; void onRtcConfigure(RtcConfigure &configure) const override; void onRecvRtp(MediaTrack &track, const std::string &rid, 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 99f9f55d..cb579118 100644 --- a/webrtc/WebRtcTransport.cpp +++ b/webrtc/WebRtcTransport.cpp @@ -802,7 +802,6 @@ void WebRtcTransportImp::onRtcp(const char *buf, size_t len) { } _ssrc_to_track.erase(it); } - onRtcpBye(); // bye 会在 sender audio track mute 时出现, 因此不能作为 shutdown 的依据 break; } @@ -1075,7 +1074,6 @@ uint64_t WebRtcTransportImp::getDuration() const { return _alive_ticker.createdTime() / 1000; } -void WebRtcTransportImp::onRtcpBye(){} ///////////////////////////////////////////////////////////////////////////////////////////// diff --git a/webrtc/WebRtcTransport.h b/webrtc/WebRtcTransport.h index dfae8012..30fa5a8b 100644 --- a/webrtc/WebRtcTransport.h +++ b/webrtc/WebRtcTransport.h @@ -156,7 +156,6 @@ 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: void sendRtcpRemb(uint32_t ssrc, size_t bit_rate); @@ -266,7 +265,6 @@ protected: virtual void onRecvRtp(MediaTrack &track, const std::string &rid, RtpPacket::Ptr rtp) = 0; void updateTicker(); float getLossRate(TrackType type); - void onRtcpBye() override; private: void onSortedRtp(MediaTrack &track, const std::string &rid, RtpPacket::Ptr rtp);