From e8abe979920708450d6756e62654e9a3ce8c3492 Mon Sep 17 00:00:00 2001 From: nxshock Date: Sun, 18 Jun 2023 14:54:35 +0500 Subject: [PATCH] Add custom bitrate parser --- config.go | 2 +- handlers.go | 8 +++++++- streamer.go | 6 +++--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/config.go b/config.go index 22b3c45..6ad6e52 100644 --- a/config.go +++ b/config.go @@ -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" ` diff --git a/handlers.go b/handlers.go index c77de9e..3b70644 100644 --- a/handlers.go +++ b/handlers.go @@ -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.FormValue("b"), 10, 64) + if err != nil { + bitrateKbps = config.Bitrate + } + + err = stream(r.FormValue("url"), w, bitrateKbps) if err != nil { log.Println(err) } diff --git a/streamer.go b/streamer.go index a754d5c..a61d22b 100644 --- a/streamer.go +++ b/streamer.go @@ -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,10 +24,10 @@ 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",