mirror of
https://github.com/livekit/livekit.git
synced 2026-10-23 17:22:59 +00:00
single-port mode (beta)
This commit is contained in:
1 parent
9a5188d620
commit
c2777cd556
5 files changed
+55
-51
No files matched your search
@@ -22,7 +22,8 @@ type Config struct {
|
||||
}
|
||||
|
||||
type RTCConfig struct {
|
||||
ICETCPPort uint16 `yaml:"ice_tcp_port"`
|
||||
UDPPort uint16 `yaml:"udp_port"`
|
||||
TCPPort uint16 `yaml:"tcp_port"`
|
||||
ICEPortRangeStart uint16 `yaml:"port_range_start"`
|
||||
ICEPortRangeEnd uint16 `yaml:"port_range_end"`
|
||||
// for testing, disable UDP
|
||||
|
||||
+28
-9
@@ -6,7 +6,9 @@ import (
|
||||
"net"
|
||||
|
||||
"github.com/go-logr/zapr"
|
||||
"github.com/pion/ice/v2"
|
||||
"github.com/pion/ion-sfu/pkg/buffer"
|
||||
"github.com/pion/logging"
|
||||
"github.com/pion/webrtc/v3"
|
||||
|
||||
"github.com/livekit/livekit-server/pkg/config"
|
||||
@@ -18,6 +20,7 @@ type WebRTCConfig struct {
|
||||
SettingEngine webrtc.SettingEngine
|
||||
Receiver ReceiverConfig
|
||||
BufferFactory *buffer.Factory
|
||||
UDPMux ice.UDPMux
|
||||
}
|
||||
|
||||
type ReceiverConfig struct {
|
||||
@@ -25,17 +28,16 @@ type ReceiverConfig struct {
|
||||
maxBitrate uint64
|
||||
}
|
||||
|
||||
// number of packets to buffer up
|
||||
const readBufferSize = 50
|
||||
|
||||
func NewWebRTCConfig(conf *config.RTCConfig, externalIP string) (*WebRTCConfig, error) {
|
||||
c := webrtc.Configuration{
|
||||
SDPSemantics: webrtc.SDPSemanticsUnifiedPlan,
|
||||
}
|
||||
s := webrtc.SettingEngine{}
|
||||
|
||||
if conf.ICEPortRangeStart != 0 && conf.ICEPortRangeEnd != 0 {
|
||||
if err := s.SetEphemeralUDPPortRange(conf.ICEPortRangeStart, conf.ICEPortRangeEnd); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
loggerFactory := logging.NewDefaultLoggerFactory()
|
||||
lkLogger := loggerFactory.NewLogger("livekit")
|
||||
|
||||
iceUrls := make([]string, 0)
|
||||
for _, stunServer := range conf.StunServers {
|
||||
@@ -64,21 +66,37 @@ func NewWebRTCConfig(conf *config.RTCConfig, externalIP string) (*WebRTCConfig,
|
||||
webrtc.NetworkTypeUDP6)
|
||||
}
|
||||
|
||||
var udpMux *ice.UDPMuxDefault
|
||||
if conf.UDPPort != 0 {
|
||||
udpMux = ice.NewUDPMuxDefault(ice.UDPMuxParams{
|
||||
Logger: lkLogger,
|
||||
ReadBufferSize: readBufferSize,
|
||||
})
|
||||
if err := udpMux.Start(int(conf.UDPPort)); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
s.SetICEUDPMux(udpMux)
|
||||
} else if conf.ICEPortRangeStart != 0 && conf.ICEPortRangeEnd != 0 {
|
||||
if err := s.SetEphemeralUDPPortRange(conf.ICEPortRangeStart, conf.ICEPortRangeEnd); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
// use TCP mux when it's set
|
||||
if conf.ICETCPPort != 0 {
|
||||
if conf.TCPPort != 0 {
|
||||
networkTypes = append(networkTypes,
|
||||
webrtc.NetworkTypeTCP4,
|
||||
webrtc.NetworkTypeTCP6,
|
||||
)
|
||||
tcpListener, err := net.ListenTCP("tcp", &net.TCPAddr{
|
||||
IP: net.IP{0, 0, 0, 0},
|
||||
Port: int(conf.ICETCPPort),
|
||||
Port: int(conf.TCPPort),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
tcpMux := webrtc.NewICETCPMux(nil, tcpListener, 10)
|
||||
tcpMux := webrtc.NewICETCPMux(lkLogger, tcpListener, readBufferSize)
|
||||
s.SetICETCPMux(tcpMux)
|
||||
}
|
||||
|
||||
@@ -95,5 +113,6 @@ func NewWebRTCConfig(conf *config.RTCConfig, externalIP string) (*WebRTCConfig,
|
||||
packetBufferSize: conf.PacketBufferSize,
|
||||
maxBitrate: conf.MaxBitrate,
|
||||
},
|
||||
UDPMux: udpMux,
|
||||
}, nil
|
||||
}
|
||||
Reference in new issue
Block a user