diff --git a/docs/ghostream.example.yml b/docs/ghostream.example.yml index cf80f3d..2290792 100644 --- a/docs/ghostream.example.yml +++ b/docs/ghostream.example.yml @@ -10,7 +10,7 @@ auth: # Example to bypass login, dangerous! #backend: bypass - + # # Example of LDAP server login #backend: ldap #ldap: @@ -41,3 +41,7 @@ webrtc: # UDP port range used to stream minPortUDP: 10000 maxPortUDP: 10005 + + # STUN servers, you should host your own Coturn instance + STUNServers: + - stun:stun.l.google.com:19302 diff --git a/main.go b/main.go index 784cde1..9236a9d 100644 --- a/main.go +++ b/main.go @@ -55,6 +55,10 @@ func loadConfiguration() { viper.SetDefault("Web.Favicon", "/favicon.ico") viper.SetDefault("WebRTC.MinPortUDP", 10000) viper.SetDefault("WebRTC.MaxPortUDP", 10005) + viper.SetDefault("WebRTC.STUNServers", []string{"stun:stun.l.google.com:19302"}) + + // Copy STUN configuration to clients + viper.Set("Web.STUNServers", viper.Get("WebRTC.STUNServers")) } func main() { diff --git a/stream/webrtc/webrtc.go b/stream/webrtc/webrtc.go index 419ddbf..5f7c346 100644 --- a/stream/webrtc/webrtc.go +++ b/stream/webrtc/webrtc.go @@ -18,6 +18,8 @@ import ( type Options struct { MinPortUDP uint16 MaxPortUDP uint16 + + STUNServers []string } // SessionDescription contains SDP data @@ -65,11 +67,7 @@ func newPeerHandler(remoteSdp webrtc.SessionDescription, cfg *Options) webrtc.Se webrtc.WithSettingEngine(settingsEngine), ) peerConnection, err := api.NewPeerConnection(webrtc.Configuration{ - ICEServers: []webrtc.ICEServer{ - { - URLs: []string{"stun:stun.l.google.com:19302"}, - }, - }, + ICEServers: []webrtc.ICEServer{{URLs: cfg.STUNServers}}, }) if err != nil { log.Println("Failed to initiate peer connection", err) diff --git a/web/static/js/viewer.js b/web/static/js/viewer.js index 6824099..d83e910 100644 --- a/web/static/js/viewer.js +++ b/web/static/js/viewer.js @@ -3,12 +3,7 @@ let peerConnection; startPeerConnection = () => { // Init peer connection peerConnection = new RTCPeerConnection({ - iceServers: [ - { - // FIXME: let admin customize the stun server - urls: 'stun:stun.l.google.com:19302' - } - ] + iceServers: [{ urls: stunServers }] }) // On connection change, change indicator color @@ -80,6 +75,3 @@ startPeerConnection = () => { } } } - -// Start -startPeerConnection() diff --git a/web/template/viewer.html b/web/template/viewer.html index 2d62cf1..e639b2b 100644 --- a/web/template/viewer.html +++ b/web/template/viewer.html @@ -36,4 +36,12 @@ + {{end}} \ No newline at end of file diff --git a/web/web.go b/web/web.go index f3b5522..cd44719 100644 --- a/web/web.go +++ b/web/web.go @@ -20,6 +20,9 @@ type Options struct { Hostname string Favicon string WidgetURL string + + // Copied from WebRTC configuration + STUNServers []string } var (