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 (