Compare commits

...

3 Commits

Author SHA1 Message Date
4451458dc2 Fix custom bitrate handling 2023-06-18 15:17:20 +05:00
09c8b3d69e Get "b" parameter from GET instead of POST 2023-06-18 15:06:48 +05:00
e8abe97992 Add custom bitrate parser 2023-06-18 14:54:35 +05:00
3 changed files with 12 additions and 6 deletions

View File

@ -16,7 +16,7 @@ type Config struct {
BufferSize uint `default:"32" validate:"required|min:1"`
// Kb
Bitrate uint `default:"32" validate:"required|min:8|max:320"`
Bitrate uint64 `default:"32" validate:"required|min:8|max:320"`
Codec string `default:"libopus" validate:"required"`
Format string `default:"opus" validate:"required" `

View File

@ -5,6 +5,7 @@ import (
"log"
"net/http"
"net/url"
"strconv"
)
func handleGenres(w http.ResponseWriter, r *http.Request) {
@ -90,7 +91,12 @@ func handleGetM3u(w http.ResponseWriter, r *http.Request) {
}
func handleStream(w http.ResponseWriter, r *http.Request) {
err := stream(r.FormValue("url"), w)
bitrateKbps, err := strconv.ParseUint(r.URL.Query().Get("b"), 10, 64)
if err != nil {
bitrateKbps = config.Bitrate
}
err = stream(r.FormValue("url"), w, bitrateKbps)
if err != nil {
log.Println(err)
}

View File

@ -12,7 +12,7 @@ import (
"gopkg.in/djherbis/buffer.v1"
)
func stream(url string, w http.ResponseWriter) error {
func stream(url string, w http.ResponseWriter, bitrateKbps uint64) error {
if url == "" {
err := errors.New("empty url")
@ -24,15 +24,15 @@ func stream(url string, w http.ResponseWriter) error {
w.Header().Set("Accept-Ranges", "none")
w.WriteHeader(http.StatusOK)
return encode(url, w)
return encode(url, w, bitrateKbps)
}
func encode(url string, w io.Writer) error {
func encode(url string, w io.Writer, bitrateKbps uint64) error {
cmd := exec.Command("ffmpeg",
"-i", url,
"-vn",
"-c:a", config.Codec,
"-b:a", fmt.Sprintf("%dk", config.Bitrate),
"-b:a", fmt.Sprintf("%dk", bitrateKbps),
"-f", config.Format,
"-ac", "2",
"pipe:1")