Added Vorbis encoding support
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
f3db7ac307
commit
05a8ed380a
|
@ -8,7 +8,7 @@ steps:
|
||||||
image: golang:1.18-alpine
|
image: golang:1.18-alpine
|
||||||
commands:
|
commands:
|
||||||
- apk update
|
- apk update
|
||||||
- apk add --no-cache git gcc g++ musl-dev bash autoconf automake cmake make libtool gettext openssl-dev flac-dev opus-dev opusfile-dev libopusenc-dev vorbis-dev libsamplerate-dev lame-dev libebur128-dev fdk-aac-dev --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community
|
- apk add --no-cache git gcc g++ musl-dev bash autoconf automake cmake make libtool gettext openssl-dev flac-dev opus-dev opusfile-dev libopusenc-dev libvorbis-dev libsamplerate-dev lame-dev libebur128-dev fdk-aac-dev --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community
|
||||||
- git clone --depth 1 https://git.gammaspectra.live/S.O.N.G/alac.git && cd alac && autoreconf -fi && ./configure --prefix /usr && make && make install && cd ..
|
- git clone --depth 1 https://git.gammaspectra.live/S.O.N.G/alac.git && cd alac && autoreconf -fi && ./configure --prefix /usr && make && make install && cd ..
|
||||||
- go build -v .
|
- go build -v .
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,6 @@ Radio streamer ([kawa](https://github.com/Luminarys/kawa) drop-in compatible).
|
||||||
|
|
||||||
# Improvements / differences from Kawa
|
# Improvements / differences from Kawa
|
||||||
* Does not use libav ([see supported formats/codecs on Kirika](https://git.gammaspectra.live/S.O.N.G/Kirika#codecs-supported))
|
* Does not use libav ([see supported formats/codecs on Kirika](https://git.gammaspectra.live/S.O.N.G/Kirika#codecs-supported))
|
||||||
* No Vorbis encoding support.
|
|
||||||
* Supports HTTP clients that have more than 16 HTTP request headers or longer than 64 bytes per header.
|
* Supports HTTP clients that have more than 16 HTTP request headers or longer than 64 bytes per header.
|
||||||
* Does not restart stream per-track, instead being a continuous stream without parameter changes.
|
* Does not restart stream per-track, instead being a continuous stream without parameter changes.
|
||||||
* Normalized channels / sample rates for all mounts.
|
* Normalized channels / sample rates for all mounts.
|
||||||
|
|
|
@ -92,11 +92,11 @@ private=false
|
||||||
#
|
#
|
||||||
# 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, vorbis, 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.
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# Additionally further options can be set on some codecs.
|
# Additionally further options can be set on some codecs.
|
||||||
|
@ -130,9 +130,9 @@ codec="opus"
|
||||||
bitrate=128
|
bitrate=128
|
||||||
|
|
||||||
[[streams]]
|
[[streams]]
|
||||||
mount="stream192.opus"
|
mount="stream192.vorbis"
|
||||||
container="ogg"
|
container="ogg"
|
||||||
codec="opus"
|
codec="vorbis"
|
||||||
bitrate=192
|
bitrate=192
|
||||||
|
|
||||||
[[streams]]
|
[[streams]]
|
||||||
|
|
3
go.mod
3
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-20220727144044-bae67a1c7588
|
git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20220728135206-2da6d5922082
|
||||||
github.com/BurntSushi/toml v1.2.0
|
github.com/BurntSushi/toml v1.2.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
|
||||||
|
@ -16,6 +16,7 @@ require (
|
||||||
git.gammaspectra.live/S.O.N.G/go-fdkaac v0.0.0-20220515171305-ffb0aafe2a61 // indirect
|
git.gammaspectra.live/S.O.N.G/go-fdkaac v0.0.0-20220515171305-ffb0aafe2a61 // indirect
|
||||||
git.gammaspectra.live/S.O.N.G/go-pus v0.0.0-20220721130634-3d5460c48ab6 // indirect
|
git.gammaspectra.live/S.O.N.G/go-pus v0.0.0-20220721130634-3d5460c48ab6 // indirect
|
||||||
git.gammaspectra.live/S.O.N.G/go-tta v0.2.1-0.20220226150007-096de1072bd6 // indirect
|
git.gammaspectra.live/S.O.N.G/go-tta v0.2.1-0.20220226150007-096de1072bd6 // indirect
|
||||||
|
git.gammaspectra.live/S.O.N.G/go-vorbis v0.0.0-20220728124510-303b3425eec0 // indirect
|
||||||
git.gammaspectra.live/S.O.N.G/goflac v0.0.0-20220515172202-6e490998d2a0 // indirect
|
git.gammaspectra.live/S.O.N.G/goflac v0.0.0-20220515172202-6e490998d2a0 // indirect
|
||||||
github.com/aam335/aac-go v0.0.0-20200408070016-52c23bd38988 // indirect
|
github.com/aam335/aac-go v0.0.0-20200408070016-52c23bd38988 // indirect
|
||||||
github.com/dh1tw/gosamplerate v0.1.2 // indirect
|
github.com/dh1tw/gosamplerate v0.1.2 // indirect
|
||||||
|
|
6
go.sum
6
go.sum
|
@ -1,5 +1,5 @@
|
||||||
git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20220727144044-bae67a1c7588 h1:cQHMeqmjzz1Pgndjuj+a/dOs7E1UF7tgBvfyf3EWKew=
|
git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20220728135206-2da6d5922082 h1:W54Hb12yRwXQnF0kdR/fUEkXkRJxag7n8nlcFMZKg6k=
|
||||||
git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20220727144044-bae67a1c7588/go.mod h1:xGdS9A9+npD2s9coQL3Qf17ddAtcrFoshhCAEcs8EOA=
|
git.gammaspectra.live/S.O.N.G/Kirika v0.0.0-20220728135206-2da6d5922082/go.mod h1:M4hLHeQyam39BCxp/0FDYIH8yaYfiRbG6xWhvvwlVn0=
|
||||||
git.gammaspectra.live/S.O.N.G/flacgo v0.0.0-20220726151057-28f458bc5391 h1:us3yKKsnMe0FZVHRSFZCw113ddiNrZgKf5M5PNr3SQ4=
|
git.gammaspectra.live/S.O.N.G/flacgo v0.0.0-20220726151057-28f458bc5391 h1:us3yKKsnMe0FZVHRSFZCw113ddiNrZgKf5M5PNr3SQ4=
|
||||||
git.gammaspectra.live/S.O.N.G/flacgo v0.0.0-20220726151057-28f458bc5391/go.mod h1:ZVHB/7Vrs9xxK1j98+SJ5TRYBc7Q9dIUaNJHEmysZcI=
|
git.gammaspectra.live/S.O.N.G/flacgo v0.0.0-20220726151057-28f458bc5391/go.mod h1:ZVHB/7Vrs9xxK1j98+SJ5TRYBc7Q9dIUaNJHEmysZcI=
|
||||||
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=
|
||||||
|
@ -12,6 +12,8 @@ git.gammaspectra.live/S.O.N.G/go-pus v0.0.0-20220721130634-3d5460c48ab6 h1:xWv02
|
||||||
git.gammaspectra.live/S.O.N.G/go-pus v0.0.0-20220721130634-3d5460c48ab6/go.mod h1:vkoHSHVM9p6vAUmXAik0gvaLcIfiQYrD6bQqVpOulUk=
|
git.gammaspectra.live/S.O.N.G/go-pus v0.0.0-20220721130634-3d5460c48ab6/go.mod h1:vkoHSHVM9p6vAUmXAik0gvaLcIfiQYrD6bQqVpOulUk=
|
||||||
git.gammaspectra.live/S.O.N.G/go-tta v0.2.1-0.20220226150007-096de1072bd6 h1:ITVVisbHPnUclp3PBkCbXFeBhOCBcOjPdgjJ9wRH3TI=
|
git.gammaspectra.live/S.O.N.G/go-tta v0.2.1-0.20220226150007-096de1072bd6 h1:ITVVisbHPnUclp3PBkCbXFeBhOCBcOjPdgjJ9wRH3TI=
|
||||||
git.gammaspectra.live/S.O.N.G/go-tta v0.2.1-0.20220226150007-096de1072bd6/go.mod h1:cobkT8u8vq/+ngLy+feKS2M2ZT2HoCec5riA/0Cex3Q=
|
git.gammaspectra.live/S.O.N.G/go-tta v0.2.1-0.20220226150007-096de1072bd6/go.mod h1:cobkT8u8vq/+ngLy+feKS2M2ZT2HoCec5riA/0Cex3Q=
|
||||||
|
git.gammaspectra.live/S.O.N.G/go-vorbis v0.0.0-20220728124510-303b3425eec0 h1:kZA/fy9BhBgNGjY8OlQbIR4xkq9fmIeRQ+sXZ+m9Ic4=
|
||||||
|
git.gammaspectra.live/S.O.N.G/go-vorbis v0.0.0-20220728124510-303b3425eec0/go.mod h1:EZl7z0vfpaiu0ykpEkk6dh59XxBgWxAh4QPCCnkhICE=
|
||||||
git.gammaspectra.live/S.O.N.G/goflac v0.0.0-20220515172202-6e490998d2a0 h1:imcnwHUqaAJzws41B8sCSp/sUmVranNjAX205Jr4Jc0=
|
git.gammaspectra.live/S.O.N.G/goflac v0.0.0-20220515172202-6e490998d2a0 h1:imcnwHUqaAJzws41B8sCSp/sUmVranNjAX205Jr4Jc0=
|
||||||
git.gammaspectra.live/S.O.N.G/goflac v0.0.0-20220515172202-6e490998d2a0/go.mod h1:/po1QgOh3xynbvi4sxdY6Iw8m5WPJfGGmry2boZD8fs=
|
git.gammaspectra.live/S.O.N.G/goflac v0.0.0-20220515172202-6e490998d2a0/go.mod h1:/po1QgOh3xynbvi4sxdY6Iw8m5WPJfGGmry2boZD8fs=
|
||||||
github.com/BurntSushi/toml v1.2.0 h1:Rt8g24XnyGTyglgET/PRUNlrUeu9F5L+7FilkXfZgs0=
|
github.com/BurntSushi/toml v1.2.0 h1:Rt8g24XnyGTyglgET/PRUNlrUeu9F5L+7FilkXfZgs0=
|
||||||
|
|
8
mount.go
8
mount.go
|
@ -8,6 +8,7 @@ import (
|
||||||
"git.gammaspectra.live/S.O.N.G/Kirika/audio/format/flac"
|
"git.gammaspectra.live/S.O.N.G/Kirika/audio/format/flac"
|
||||||
"git.gammaspectra.live/S.O.N.G/Kirika/audio/format/mp3"
|
"git.gammaspectra.live/S.O.N.G/Kirika/audio/format/mp3"
|
||||||
"git.gammaspectra.live/S.O.N.G/Kirika/audio/format/opus"
|
"git.gammaspectra.live/S.O.N.G/Kirika/audio/format/opus"
|
||||||
|
"git.gammaspectra.live/S.O.N.G/Kirika/audio/format/vorbis"
|
||||||
"git.gammaspectra.live/S.O.N.G/Kirika/audio/packetizer"
|
"git.gammaspectra.live/S.O.N.G/Kirika/audio/packetizer"
|
||||||
"github.com/enriquebris/goconcurrentqueue"
|
"github.com/enriquebris/goconcurrentqueue"
|
||||||
"io"
|
"io"
|
||||||
|
@ -64,7 +65,12 @@ func NewStreamMount(source audio.Source, config *StreamConfig) *StreamMount {
|
||||||
|
|
||||||
switch config.Codec {
|
switch config.Codec {
|
||||||
case "vorbis":
|
case "vorbis":
|
||||||
return nil
|
encoderFormat = vorbis.NewFormat()
|
||||||
|
if bitrate != nil {
|
||||||
|
options["bitrate"] = bitrate
|
||||||
|
}
|
||||||
|
mimeType = "audio/ogg;codecs=vorbis"
|
||||||
|
packetizerEntry = packetizer.NewOggPacketizer(reader)
|
||||||
case "opus":
|
case "opus":
|
||||||
encoderFormat = opus.NewFormat()
|
encoderFormat = opus.NewFormat()
|
||||||
if bitrate != nil {
|
if bitrate != nil {
|
||||||
|
|
Loading…
Reference in a new issue