Reworded example config, added afterburner and offset_start options
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
b6dad55d31
commit
045b72dfa7
12
config.go
12
config.go
|
@ -76,6 +76,18 @@ func (s *StreamConfig) GetStringOption(name string, defaultValue string) string
|
||||||
return defaultValue
|
return defaultValue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *StreamConfig) GetBoolOption(name string, defaultValue bool) bool {
|
||||||
|
if v, ok := s.Options[name].(bool); ok {
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
|
||||||
|
if v, ok := s.Options[name].(string); ok {
|
||||||
|
return v == "true"
|
||||||
|
}
|
||||||
|
|
||||||
|
return defaultValue
|
||||||
|
}
|
||||||
|
|
||||||
func (s *StreamConfig) GetOption(name string, defaultValue interface{}) interface{} {
|
func (s *StreamConfig) GetOption(name string, defaultValue interface{}) interface{} {
|
||||||
|
|
||||||
if v, ok := s.Options[name]; ok {
|
if v, ok := s.Options[name]; ok {
|
||||||
|
|
|
@ -80,18 +80,24 @@ private=false
|
||||||
# A list of streams to make available at [radio.port]/*(mount) follows. The
|
# A list of streams to make available at [radio.port]/*(mount) follows. The
|
||||||
# following properties are available:
|
# following properties are available:
|
||||||
#
|
#
|
||||||
# mount: the HTTP address to serve the stream from
|
# mount: the HTTP address to serve the stream from.
|
||||||
|
#
|
||||||
# container: the container format to use (ogg, flac, aac/adts, or mp3). See Kirika's supported format list.
|
# container: the container format to use (ogg, flac, aac/adts, or mp3). See Kirika's supported format list.
|
||||||
|
#
|
||||||
# codec: the audio codec to use (opus, flac, aac, or mp3)
|
# codec: the audio codec to use (opus, flac, aac, or mp3)
|
||||||
|
#
|
||||||
# bitrate: the desired bitrate of the stream in Kb/s, if not specified (or 0) an appropriate
|
# bitrate: the desired bitrate of the stream in Kb/s, if not specified (or 0) an appropriate
|
||||||
# bitrate will be automatically selected based on the container/codec
|
# bitrate will be automatically selected based on the container/codec
|
||||||
# MeteorLight extension: bitrate can be a string (for example, v0-v9 on MP3). codec can also be he-aacv2. No vorbis support.
|
# MeteorLight extension: bitrate can be a string (for example, v0-v9 on MP3). codec can also be he-aacv2. No vorbis support.
|
||||||
|
#
|
||||||
|
#
|
||||||
# Additionally further options can be set on some codecs.
|
# Additionally further options can be set on some codecs.
|
||||||
# - FLAC supports bitdepth (int), compression_level (int), block_size (int)
|
# - FLAC supports bitdepth (int) default 16, compression_level (int) default 8, block_size (int) default 0 = auto
|
||||||
# - AAC supports VBR bitrate (vbr1 - vbr5), mode (lc, he, hev2) and afterburner (bool)
|
# - AAC supports VBR bitrate (vbr1 - vbr5), mode (lc, he, hev2) and afterburner (bool)
|
||||||
# - MP3 supports VBR bitrate (v0 - v9)
|
# - MP3 supports VBR bitrate (v0 - v9)
|
||||||
# - All but Opus support setting samplerate
|
# - All but Opus support setting samplerate (int)
|
||||||
# - All support setting channels to 1 or 2
|
# - All but FLAC support setting offset_start (bool) default true, rewrites packets PTS to align with the client start time.
|
||||||
|
# - All support setting channels (int) to 1 or 2, default 2
|
||||||
[[streams]]
|
[[streams]]
|
||||||
mount="stream128.mp3"
|
mount="stream128.mp3"
|
||||||
container="mp3"
|
container="mp3"
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -3,7 +3,7 @@ module git.gammaspectra.live/S.O.N.G/MeteorLight
|
||||||
go 1.18
|
go 1.18
|
||||||
|
|
||||||
require (
|
require (
|
||||||
git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20220713142734-894d8db69758
|
git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20220715173911-915e8dd21372
|
||||||
github.com/BurntSushi/toml v1.1.0
|
github.com/BurntSushi/toml v1.1.0
|
||||||
github.com/dhowden/tag v0.0.0-20220618230019-adf36e896086
|
github.com/dhowden/tag v0.0.0-20220618230019-adf36e896086
|
||||||
github.com/enriquebris/goconcurrentqueue v0.6.3
|
github.com/enriquebris/goconcurrentqueue v0.6.3
|
||||||
|
|
4
go.sum
4
go.sum
|
@ -1,5 +1,5 @@
|
||||||
git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20220713142734-894d8db69758 h1:e5mVs6gIje3hA4+Z2pEHvhxd8YC0CB9oiHP1PzKQ7bE=
|
git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20220715173911-915e8dd21372 h1:Rc/vh6f5SPzqJpjTV77QMB6e355TK9sAuyFEZNG4jJw=
|
||||||
git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20220713142734-894d8db69758/go.mod h1:HrYZb1M5dv2hOfpUhLOYkK4qQqBu+7hg7p14R19ebvs=
|
git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20220715173911-915e8dd21372/go.mod h1:HrYZb1M5dv2hOfpUhLOYkK4qQqBu+7hg7p14R19ebvs=
|
||||||
git.gammaspectra.live/S.O.N.G/go-alac v0.0.0-20220421115623-d0b3bfe57e0f h1:CxN7zlk5FdAieyRKQSbwBGBsvQ2cDF8JVCODZpzcRkA=
|
git.gammaspectra.live/S.O.N.G/go-alac v0.0.0-20220421115623-d0b3bfe57e0f h1:CxN7zlk5FdAieyRKQSbwBGBsvQ2cDF8JVCODZpzcRkA=
|
||||||
git.gammaspectra.live/S.O.N.G/go-alac v0.0.0-20220421115623-d0b3bfe57e0f/go.mod h1:f1+h7KOnuM9zcEQp7ri4UaVvgX4m1NFFIXgReIyjGMA=
|
git.gammaspectra.live/S.O.N.G/go-alac v0.0.0-20220421115623-d0b3bfe57e0f/go.mod h1:f1+h7KOnuM9zcEQp7ri4UaVvgX4m1NFFIXgReIyjGMA=
|
||||||
git.gammaspectra.live/S.O.N.G/go-ebur128 v0.0.0-20220418202343-73a167e76255 h1:BWRx2ZFyhp5+rsXhdDZtk5Gld+L44lxlN9ASqB9Oj0M=
|
git.gammaspectra.live/S.O.N.G/go-ebur128 v0.0.0-20220418202343-73a167e76255 h1:BWRx2ZFyhp5+rsXhdDZtk5Gld+L44lxlN9ASqB9Oj0M=
|
||||||
|
|
4
mount.go
4
mount.go
|
@ -40,6 +40,7 @@ type StreamMount struct {
|
||||||
Options map[string]interface{}
|
Options map[string]interface{}
|
||||||
SampleRate int
|
SampleRate int
|
||||||
Channels int
|
Channels int
|
||||||
|
OffsetStart bool
|
||||||
MetadataQueue *goconcurrentqueue.FIFO
|
MetadataQueue *goconcurrentqueue.FIFO
|
||||||
listeners []*StreamListener
|
listeners []*StreamListener
|
||||||
listenersLock sync.Mutex
|
listenersLock sync.Mutex
|
||||||
|
@ -99,6 +100,7 @@ func NewStreamMount(source audio.Source, config *StreamConfig) *StreamMount {
|
||||||
options["bitrate"] = bitrate
|
options["bitrate"] = bitrate
|
||||||
}
|
}
|
||||||
options["mode"] = config.GetStringOption("mode", "lc")
|
options["mode"] = config.GetStringOption("mode", "lc")
|
||||||
|
options["afterburner"] = config.GetBoolOption("afterburner", true)
|
||||||
mimeType = "audio/aac;codecs=mp4a.40.2"
|
mimeType = "audio/aac;codecs=mp4a.40.2"
|
||||||
if options["mode"] == "he" || options["mode"] == "hev1" || options["bitrate"] == "vbr2" {
|
if options["mode"] == "he" || options["mode"] == "hev1" || options["bitrate"] == "vbr2" {
|
||||||
mimeType = "audio/aac;codecs=mp4a.40.5"
|
mimeType = "audio/aac;codecs=mp4a.40.5"
|
||||||
|
@ -140,6 +142,7 @@ func NewStreamMount(source audio.Source, config *StreamConfig) *StreamMount {
|
||||||
options["bitrate"] = bitrate
|
options["bitrate"] = bitrate
|
||||||
}
|
}
|
||||||
options["mode"] = config.GetStringOption("mode", "lc")
|
options["mode"] = config.GetStringOption("mode", "lc")
|
||||||
|
options["afterburner"] = config.GetBoolOption("afterburner", true)
|
||||||
mimeType = "audio/aac;codecs=mp4a.40.2"
|
mimeType = "audio/aac;codecs=mp4a.40.2"
|
||||||
if options["mode"] == "he" || options["mode"] == "hev1" || options["bitrate"] == "vbr2" {
|
if options["mode"] == "he" || options["mode"] == "hev1" || options["bitrate"] == "vbr2" {
|
||||||
mimeType = "audio/aac;codecs=mp4a.40.5"
|
mimeType = "audio/aac;codecs=mp4a.40.5"
|
||||||
|
@ -180,6 +183,7 @@ func NewStreamMount(source audio.Source, config *StreamConfig) *StreamMount {
|
||||||
FormatDescription: encoderFormat.Description(),
|
FormatDescription: encoderFormat.Description(),
|
||||||
Packetizer: packetizerEntry,
|
Packetizer: packetizerEntry,
|
||||||
SampleRate: sampleRate,
|
SampleRate: sampleRate,
|
||||||
|
OffsetStart: config.GetBoolOption("offset_start", true),
|
||||||
Channels: channels,
|
Channels: channels,
|
||||||
Options: options,
|
Options: options,
|
||||||
MetadataQueue: goconcurrentqueue.NewFIFO(),
|
MetadataQueue: goconcurrentqueue.NewFIFO(),
|
||||||
|
|
4
queue.go
4
queue.go
|
@ -723,7 +723,7 @@ func (q *Queue) HandleRadioRequest(writer http.ResponseWriter, request *http.Req
|
||||||
}
|
}
|
||||||
|
|
||||||
var p []byte
|
var p []byte
|
||||||
if offsetable, ok := packet.(packetizer.OffsetablePacket); ok {
|
if offsetable, ok := packet.(packetizer.OffsetablePacket); mount.OffsetStart && ok {
|
||||||
if streamStartOffset <= -1 {
|
if streamStartOffset <= -1 {
|
||||||
if offsetable.KeepMode() != packetizer.Keep {
|
if offsetable.KeepMode() != packetizer.Keep {
|
||||||
streamStartOffset = offsetable.GetStartSampleNumber()
|
streamStartOffset = offsetable.GetStartSampleNumber()
|
||||||
|
@ -776,7 +776,7 @@ func (q *Queue) HandleRadioRequest(writer http.ResponseWriter, request *http.Req
|
||||||
return requestDone
|
return requestDone
|
||||||
}
|
}
|
||||||
|
|
||||||
if offsetable, ok := packet.(packetizer.OffsetablePacket); ok {
|
if offsetable, ok := packet.(packetizer.OffsetablePacket); mount.OffsetStart && ok {
|
||||||
if streamStartOffset <= -1 {
|
if streamStartOffset <= -1 {
|
||||||
if offsetable.KeepMode() != packetizer.Keep {
|
if offsetable.KeepMode() != packetizer.Keep {
|
||||||
streamStartOffset = offsetable.GetStartSampleNumber()
|
streamStartOffset = offsetable.GetStartSampleNumber()
|
||||||
|
|
Loading…
Reference in a new issue