Map domain to streamid instead of considering that the domain is the streamid: no need to pass a YAML key that contains dots

This commit is contained in:
Yohann D'ANELLO 2020-10-13 17:12:19 +02:00
parent 3b8c149e38
commit 4546f3b8fb
5 changed files with 29 additions and 27 deletions

View File

@ -73,7 +73,7 @@ srt:
telnet:
# By default, this easter egg is disabled.
# You must enable it to use it.
#enable: false
#enabled: false
#listenAddress: :8023
@ -115,11 +115,13 @@ web:
#
#name: Ghostream
# Use the domain name as the stream name
# e.g., on http://example.com:8080/ the stream served will be "example.com"
# Use the domain name as the stream name for some hosts
# e.g., on http://stream.example.com:8080/, if the domain stream.example.com is mapped to "example",
# the stream served will be "example".
# This implies that your domain will be able to serve only one stream.
#
#oneStreamPerDomain: false
#mapDomainToStream:
# stream.example.com: example
# Stream player poster
# Shown when stream is loading or inactive.

View File

@ -71,7 +71,7 @@ func New() *Config {
Hostname: "localhost",
ListenAddress: ":8080",
Name: "Ghostream",
OneStreamPerDomain: false,
MapDomainToStream: make(map[string]string),
PlayerPoster: "/static/img/no_stream.svg",
ViewersCounterRefreshPeriod: 20000,
},

View File

@ -24,17 +24,17 @@ func viewerPostHandler(w http.ResponseWriter, r *http.Request) {
// Get stream ID from URL, or from domain name
path := r.URL.Path[1:]
if cfg.OneStreamPerDomain {
host := r.Host
if strings.Contains(host, ":") {
realHost, _, err := net.SplitHostPort(r.Host)
if err != nil {
log.Printf("Failed to split host and port from %s", r.Host)
return
}
host = realHost
host := r.Host
if strings.Contains(host, ":") {
realHost, _, err := net.SplitHostPort(r.Host)
if err != nil {
log.Printf("Failed to split host and port from %s", r.Host)
return
}
path = host
host = realHost
}
if streamID, ok := cfg.MapDomainToStream[host]; ok {
path = streamID
}
// Decode client description
@ -73,20 +73,20 @@ func viewerPostHandler(w http.ResponseWriter, r *http.Request) {
func viewerGetHandler(w http.ResponseWriter, r *http.Request) {
// Get stream ID from URL, or from domain name
path := r.URL.Path[1:]
if cfg.OneStreamPerDomain {
host := r.Host
if strings.Contains(host, ":") {
realHost, _, err := net.SplitHostPort(r.Host)
if err != nil {
log.Printf("Failed to split host and port from %s", r.Host)
return
}
host = realHost
host := r.Host
if strings.Contains(host, ":") {
realHost, _, err := net.SplitHostPort(r.Host)
if err != nil {
log.Printf("Failed to split host and port from %s", r.Host)
return
}
host = realHost
}
if streamID, ok := cfg.MapDomainToStream[host]; ok {
if path == "about" {
path = ""
} else {
path = host
path = streamID
}
}

View File

@ -4,7 +4,7 @@
<head>
<meta charset="UTF-8">
<title>{{if .Path}}{{if not .Cfg.OneStreamPerDomain}}{{.Path}} - {{end}}{{end}}{{.Cfg.Name}}</title>
<title>{{if .Path}}{{.Path}} - {{end}}{{.Cfg.Name}}</title>
<link rel="stylesheet" href="static/css/style.css">
<link rel="stylesheet" href="static/css/player.css">
{{if .Cfg.CustomCSS}}<link rel="stylesheet" href="{{.Cfg.CustomCSS}}">{{end}}

View File

@ -22,7 +22,7 @@ type Options struct {
Hostname string
ListenAddress string
Name string
OneStreamPerDomain bool
MapDomainToStream map[string]string
PlayerPoster string
SRTServerPort string
STUNServers []string