From bd73dfae9d5ad15f738d095744a1f4ebc3ad17b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20=C5=A0ediv=C3=BD?= Date: Tue, 13 Dec 2022 23:40:22 +0100 Subject: [PATCH] Fix WebRTC mux issues. --- docs/changelog.md | 3 +++ server/internal/webrtc/webrtc.go | 18 +++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/docs/changelog.md b/docs/changelog.md index 511a5a7..fe877ca 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -2,6 +2,9 @@ ## master branch +### Bugs +- Fixed TCP mux occasional freeze by adding write buffer to it. + ## [n.eko v2.7](https://github.com/m1k1o/neko/releases/tag/v2.7) ### New Features diff --git a/server/internal/webrtc/webrtc.go b/server/internal/webrtc/webrtc.go index d2c7149..e19e003 100644 --- a/server/internal/webrtc/webrtc.go +++ b/server/internal/webrtc/webrtc.go @@ -9,6 +9,7 @@ import ( "strings" "time" + "github.com/pion/ice/v2" "github.com/pion/interceptor" "github.com/pion/webrtc/v3" "github.com/pion/webrtc/v3/pkg/media" @@ -125,7 +126,12 @@ func (manager *WebRTCManager) initAPI() error { return err } - tcpMux := webrtc.NewICETCPMux(logger.NewLogger("ice-tcp"), tcpListener, 32) + tcpMux := ice.NewTCPMuxDefault(ice.TCPMuxParams{ + Listener: tcpListener, + Logger: logger.NewLogger("ice-tcp"), + ReadBufferSize: 32, // receiving channel size + WriteBufferSize: 4 * 1024 * 1024, // write buffer size, 4MB + }) settings.SetICETCPMux(tcpMux) networkType = append(networkType, webrtc.NetworkTypeTCP4) @@ -134,20 +140,18 @@ func (manager *WebRTCManager) initAPI() error { // Add UDP Mux if manager.config.UDPMUX > 0 { - udpListener, err := net.ListenUDP("udp", &net.UDPAddr{ - IP: net.IP{0, 0, 0, 0}, - Port: manager.config.UDPMUX, - }) + udpMux, err := ice.NewMultiUDPMuxFromPort(manager.config.UDPMUX, + ice.UDPMuxFromPortWithLogger(logger.NewLogger("ice-udp")), + ) if err != nil { return err } - udpMux := webrtc.NewICEUDPMux(logger.NewLogger("ice-udp"), udpListener) settings.SetICEUDPMux(udpMux) networkType = append(networkType, webrtc.NetworkTypeUDP4) - manager.logger.Info().Str("listener", udpListener.LocalAddr().String()).Msg("using UDP MUX") + manager.logger.Info().Int("port", manager.config.UDPMUX).Msg("using UDP MUX") } // Enable support for TCP and UDP ICE candidates