mirror of
https://github.com/owncast/owncast.git
synced 2024-10-23 04:55:56 +03:00
Centralize default values into an instance of config. For #64
This commit is contained in:
parent
2855027f22
commit
fff911010c
3 changed files with 69 additions and 31 deletions
|
@ -3,8 +3,6 @@ package config
|
|||
import (
|
||||
"errors"
|
||||
"io/ioutil"
|
||||
"os/exec"
|
||||
"strings"
|
||||
|
||||
"github.com/gabek/owncast/utils"
|
||||
log "github.com/sirupsen/logrus"
|
||||
|
@ -13,6 +11,7 @@ import (
|
|||
|
||||
//Config contains a reference to the configuration
|
||||
var Config *config
|
||||
var _default config
|
||||
|
||||
type config struct {
|
||||
ChatDatabaseFilePath string `yaml:"chatDatabaseFile"`
|
||||
|
@ -137,32 +136,12 @@ func (c *config) verifySettings() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (c *config) GetFFMpegPath() string {
|
||||
if c.FFMpegPath != "" {
|
||||
return c.FFMpegPath
|
||||
}
|
||||
|
||||
cmd := exec.Command("which", "ffmpeg")
|
||||
out, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
log.Panicln("Unable to determine path to ffmpeg. Please specify it in the config file.")
|
||||
}
|
||||
|
||||
path := strings.TrimSpace(string(out))
|
||||
|
||||
// Memoize it for future access
|
||||
c.FFMpegPath = path
|
||||
|
||||
return path
|
||||
}
|
||||
|
||||
func (c *config) GetVideoSegmentSecondsLength() int {
|
||||
if c.VideoSettings.ChunkLengthInSeconds != 0 {
|
||||
return c.VideoSettings.ChunkLengthInSeconds
|
||||
}
|
||||
|
||||
// Default
|
||||
return 4
|
||||
return _default.GetVideoSegmentSecondsLength()
|
||||
}
|
||||
|
||||
func (c *config) GetPublicHLSSavePath() string {
|
||||
|
@ -170,7 +149,7 @@ func (c *config) GetPublicHLSSavePath() string {
|
|||
return c.PublicHLSPath
|
||||
}
|
||||
|
||||
return "webroot/hls"
|
||||
return _default.PublicHLSPath
|
||||
}
|
||||
|
||||
func (c *config) GetPrivateHLSSavePath() string {
|
||||
|
@ -178,7 +157,7 @@ func (c *config) GetPrivateHLSSavePath() string {
|
|||
return c.PrivateHLSPath
|
||||
}
|
||||
|
||||
return "hls"
|
||||
return _default.PrivateHLSPath
|
||||
}
|
||||
|
||||
func (c *config) GetPublicWebServerPort() int {
|
||||
|
@ -186,8 +165,7 @@ func (c *config) GetPublicWebServerPort() int {
|
|||
return c.WebServerPort
|
||||
}
|
||||
|
||||
// Default web server port
|
||||
return 8080
|
||||
return _default.WebServerPort
|
||||
}
|
||||
|
||||
func (c *config) GetMaxNumberOfReferencedSegmentsInPlaylist() int {
|
||||
|
@ -195,7 +173,7 @@ func (c *config) GetMaxNumberOfReferencedSegmentsInPlaylist() int {
|
|||
return c.Files.MaxNumberInPlaylist
|
||||
}
|
||||
|
||||
return 20
|
||||
return _default.GetMaxNumberOfReferencedSegmentsInPlaylist()
|
||||
}
|
||||
|
||||
func (c *config) GetOfflineContentPath() string {
|
||||
|
@ -204,12 +182,29 @@ func (c *config) GetOfflineContentPath() string {
|
|||
}
|
||||
|
||||
// This is relative to the webroot, not the project root.
|
||||
return "static/offline.m4v"
|
||||
return _default.VideoSettings.OfflineContent
|
||||
}
|
||||
|
||||
func (c *config) GetFFMpegPath() string {
|
||||
if c.FFMpegPath != "" {
|
||||
return c.FFMpegPath
|
||||
}
|
||||
|
||||
return _default.FFMpegPath
|
||||
}
|
||||
|
||||
func (c *config) GetVideoStreamQualities() []StreamQuality {
|
||||
if len(c.VideoSettings.StreamQualities) > 0 {
|
||||
return c.VideoSettings.StreamQualities
|
||||
}
|
||||
|
||||
return _default.VideoSettings.StreamQualities
|
||||
}
|
||||
|
||||
//Load tries to load the configuration file
|
||||
func Load(filePath string, versionInfo string) error {
|
||||
Config = new(config)
|
||||
_default = getDefaults()
|
||||
|
||||
if err := Config.load(filePath); err != nil {
|
||||
return err
|
||||
|
@ -220,8 +215,10 @@ func Load(filePath string, versionInfo string) error {
|
|||
// Defaults
|
||||
|
||||
// This is relative to the webroot, not the project root.
|
||||
// Has to be set here instead of pulled from a getter
|
||||
// since it's serialized to JSON.
|
||||
if Config.InstanceDetails.ExtraInfoFile == "" {
|
||||
Config.InstanceDetails.ExtraInfoFile = "/static/content.md"
|
||||
Config.InstanceDetails.ExtraInfoFile = _default.InstanceDetails.ExtraInfoFile
|
||||
}
|
||||
|
||||
return Config.verifySettings()
|
||||
|
|
40
config/defaults.go
Normal file
40
config/defaults.go
Normal file
|
@ -0,0 +1,40 @@
|
|||
package config
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os/exec"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func getDefaults() config {
|
||||
defaults := config{}
|
||||
defaults.WebServerPort = 8080
|
||||
defaults.FFMpegPath = getDefaultFFMpegPath()
|
||||
defaults.VideoSettings.ChunkLengthInSeconds = 4
|
||||
defaults.Files.MaxNumberInPlaylist = 5
|
||||
defaults.PublicHLSPath = "webroot/hls"
|
||||
defaults.PrivateHLSPath = "hls"
|
||||
defaults.VideoSettings.OfflineContent = "static/offline.m4v"
|
||||
defaults.InstanceDetails.ExtraInfoFile = "/static/content.md"
|
||||
|
||||
defaultQuality := StreamQuality{
|
||||
IsAudioPassthrough: true,
|
||||
VideoBitrate: 1200,
|
||||
EncoderPreset: "veryfast",
|
||||
}
|
||||
defaults.VideoSettings.StreamQualities = []StreamQuality{defaultQuality}
|
||||
|
||||
return defaults
|
||||
}
|
||||
|
||||
func getDefaultFFMpegPath() string {
|
||||
cmd := exec.Command("which", "ffmpeg")
|
||||
out, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
log.Panicln("Unable to determine path to ffmpeg. Please specify it in the config file.")
|
||||
}
|
||||
|
||||
path := strings.TrimSpace(string(out))
|
||||
|
||||
return path
|
||||
}
|
|
@ -55,7 +55,8 @@ videoSettings:
|
|||
audioPassthrough: true
|
||||
# The slower the preset the higher quality the video is.
|
||||
# Select a preset from https://trac.ffmpeg.org/wiki/Encode/H.264
|
||||
encoderPreset: superfast
|
||||
# "superfast" and "ultrafast" are generally not recommended since they look bad.
|
||||
encoderPreset: veryfast
|
||||
|
||||
- medium:
|
||||
videoBitrate: 800
|
||||
|
|
Loading…
Reference in a new issue