diff --git a/prober/decoder.go b/prober/decoder.go index 7c45266223444a2acaf77acb1453c75b53f2c932..d8849378df708d0283dcf61cf73a8ec5d5461f99 100644 --- a/prober/decoder.go +++ b/prober/decoder.go @@ -21,8 +21,13 @@ type decoder struct { cmd *exec.Cmd } -func newDecoder(r io.Reader) (*decoder, error) { - cmd := exec.Command("sox", "-", "-r", analysisSampleRate, "-c", analysisChannels, "-b", "64", "-e", "float", "--endian", "little", "-t", "raw", "-") +func newDecoder(r io.Reader, ext string) (*decoder, error) { + var args []string + if ext == ".mp3" { + args = append(args, "-t", "mp3") + } + args = append(args, "-", "-r", analysisSampleRate, "-c", analysisChannels, "-b", "64", "-e", "float", "--endian", "little", "-t", "raw", "-") + cmd := exec.Command("sox", args...) cmd.Stdin = r cmd.Stderr = os.Stderr stdout, err := cmd.StdoutPipe() diff --git a/prober/prober.go b/prober/prober.go index 6a854413bed0dc63b47014c4401f2cbfb5027a67..b80c7bdba5e319c94c39a4fb15e41ef96f71efcf 100644 --- a/prober/prober.go +++ b/prober/prober.go @@ -5,6 +5,7 @@ import ( "log" "net/http" "net/url" + "path/filepath" "time" "github.com/prometheus/client_golang/prometheus" @@ -119,7 +120,7 @@ func (p *Prober) stream(deadline time.Time) { // Instrument the raw bytes transfered, before decoding happens. r := newInstrumentedReader(resp.Body, bytesReceived.WithLabelValues(p.streamName)) - dec, err := newDecoder(r) + dec, err := newDecoder(r, filepath.Ext(p.streamURL)) if err != nil { log.Printf("decoder error: %v", err) connections.WithLabelValues(p.streamName, "decoder_error").Inc()