diff --git a/webrtc/WebRtcSession.cpp b/webrtc/WebRtcSession.cpp index 4756dc8f..76aecd26 100644 --- a/webrtc/WebRtcSession.cpp +++ b/webrtc/WebRtcSession.cpp @@ -75,7 +75,6 @@ void WebRtcSession::onError(const SockException &err) { //在udp链接迁移时,新的WebRtcSession对象将接管WebRtcTransport对象的生命周期 //本WebRtcSession对象将在超时后自动销毁 WarnP(this) << err.what(); - _transport = nullptr; } void WebRtcSession::onManager() { diff --git a/webrtc/WebRtcTransport.cpp b/webrtc/WebRtcTransport.cpp index 8b92d617..01213f4f 100644 --- a/webrtc/WebRtcTransport.cpp +++ b/webrtc/WebRtcTransport.cpp @@ -489,7 +489,7 @@ void WebRtcTransportImp::onStartWebRTC() { if (!strongSelf) { return; } - strongSelf->onShutdown(SockException(Err_eof, "rtsp ring buffer detached")); + strongSelf->onShutdown(SockException(Err_shutdown, "rtsp ring buffer detached")); }); RtcSession rtsp_send_sdp; @@ -956,6 +956,8 @@ void WebRtcTransportImp::onBeforeEncryptRtp(const char *buf, int &len, void *ctx void WebRtcTransportImp::onShutdown(const SockException &ex){ WarnL << ex.what(); unrefSelf(); + //触发发送dtls close通知 + WebRtcTransport::onDestory(); auto session = _session.lock(); if (session) { session->shutdown(ex); @@ -970,7 +972,13 @@ bool WebRtcTransportImp::close(MediaSource &sender, bool force) { return false; } string err = StrPrinter << "close media:" << sender.getSchema() << "/" << sender.getVhost() << "/" << sender.getApp() << "/" << sender.getId() << " " << force; - onShutdown(SockException(Err_shutdown,err)); + weak_ptr weak_self = static_pointer_cast(shared_from_this()); + getPoller()->async([weak_self, err]() { + auto strong_self = weak_self.lock(); + if (strong_self) { + strong_self->onShutdown(SockException(Err_shutdown, err)); + } + }); return true; }