mirror of
https://github.com/giongto35/cloud-game.git
synced 2026-07-25 02:57:24 +00:00
* Add port and IP config and env params for bridged Docker network in Windows, macOS - CLOUD_GAME_WEBRTC_ICEIPMAP -- replaces IP of any ICE candidates on the server - CLOUD_GAME_WEBRTC_ICEPORTS_MIN/MAX -- limits WebRTC random port range on the server
44 lines
1.2 KiB
Go
44 lines
1.2 KiB
Go
package webrtc
|
|
|
|
import (
|
|
conf "github.com/giongto35/cloud-game/v2/pkg/config/webrtc"
|
|
"github.com/pion/interceptor"
|
|
. "github.com/pion/webrtc/v3"
|
|
)
|
|
|
|
func NewInterceptedPeerConnection(conf conf.Webrtc, interceptors []interceptor.Interceptor) (*PeerConnection, error) {
|
|
m := &MediaEngine{}
|
|
if err := m.RegisterDefaultCodecs(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
i := &interceptor.Registry{}
|
|
if err := RegisterDefaultInterceptors(m, i); err != nil {
|
|
return nil, err
|
|
}
|
|
for _, itc := range interceptors {
|
|
i.Add(itc)
|
|
}
|
|
|
|
settingEngine := SettingEngine{}
|
|
if conf.IcePorts.Min > 0 && conf.IcePorts.Max > 0 {
|
|
if err := settingEngine.SetEphemeralUDPPortRange(conf.IcePorts.Min, conf.IcePorts.Max); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
if conf.IceIpMap != "" {
|
|
settingEngine.SetNAT1To1IPs([]string{conf.IceIpMap}, ICECandidateTypeHost)
|
|
}
|
|
|
|
peerConf := Configuration{ICEServers: []ICEServer{}}
|
|
for _, server := range conf.IceServers {
|
|
peerConf.ICEServers = append(peerConf.ICEServers, ICEServer{
|
|
URLs: []string{server.Url},
|
|
Username: server.Username,
|
|
Credential: server.Credential,
|
|
})
|
|
}
|
|
|
|
api := NewAPI(WithMediaEngine(m), WithInterceptorRegistry(i), WithSettingEngine(settingEngine))
|
|
return api.NewPeerConnection(peerConf)
|
|
}
|