From 38a18cab6226db6f8d1982a425da6a4de58bed7e Mon Sep 17 00:00:00 2001 From: Alexey Khit Date: Sat, 27 Aug 2022 15:57:47 +0300 Subject: [PATCH] Clear webrtc resources on failed connection --- cmd/webrtc/webrtc.go | 4 ++-- pkg/webrtc/conn.go | 21 ++++++++++++++++++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/cmd/webrtc/webrtc.go b/cmd/webrtc/webrtc.go index c6a23748..f4589cf4 100644 --- a/cmd/webrtc/webrtc.go +++ b/cmd/webrtc/webrtc.go @@ -151,8 +151,8 @@ func ExchangeSDP( conn.UserAgent = userAgent conn.Listen(func(msg interface{}) { switch msg := msg.(type) { - case streamer.EventType: - if msg == streamer.StateNull { + case pion.PeerConnectionState: + if msg == pion.PeerConnectionStateClosed{ stream.RemoveConsumer(conn) } } diff --git a/pkg/webrtc/conn.go b/pkg/webrtc/conn.go index 4a467c50..a80561d7 100644 --- a/pkg/webrtc/conn.go +++ b/pkg/webrtc/conn.go @@ -62,17 +62,32 @@ func (c *Conn) Init() { fmt.Printf("TODO: webrtc ontrack %#v\n", remote) }) + // OK connection: + // 15:01:46 ICE connection state changed: checking + // 15:01:46 peer connection state changed: connected + // 15:01:54 peer connection state changed: disconnected + // 15:02:20 peer connection state changed: failed + // + // Fail connection: + // 14:53:08 ICE connection state changed: checking + // 14:53:39 peer connection state changed: failed c.Conn.OnConnectionStateChange(func(state webrtc.PeerConnectionState) { c.Fire(state) // TODO: remove switch state { case webrtc.PeerConnectionStateConnected: - c.Fire(streamer.StatePlaying) + c.Fire(streamer.StatePlaying) // TODO: remove case webrtc.PeerConnectionStateDisconnected: - c.Fire(streamer.StateNull) - case webrtc.PeerConnectionStateFailed: + c.Fire(streamer.StateNull) // TODO: remove + // disconnect event comes earlier, than failed + // but it comes only for success connections _ = c.Conn.Close() + c.Conn = nil + case webrtc.PeerConnectionStateFailed: + if c.Conn != nil { + _ = c.Conn.Close() + } } }) }