From 570b7d0d97ea222b9db719802c4dce0eea0ef7b9 Mon Sep 17 00:00:00 2001 From: Alex X Date: Mon, 11 Nov 2024 17:45:55 +0300 Subject: [PATCH] Code refactoring for #1450 --- internal/ffmpeg/ffmpeg.go | 5 +++-- internal/rtsp/rtsp.go | 21 ++++++++++----------- internal/streams/add_consumer.go | 28 ++++------------------------ 3 files changed, 17 insertions(+), 37 deletions(-) diff --git a/internal/ffmpeg/ffmpeg.go b/internal/ffmpeg/ffmpeg.go index b57dcc70..25d61e4b 100644 --- a/internal/ffmpeg/ffmpeg.go +++ b/internal/ffmpeg/ffmpeg.go @@ -223,8 +223,9 @@ func parseArgs(s string) *ffmpeg.Args { s += "?video&audio" } s += "&source=ffmpeg:" + url.QueryEscape(source) - // change codec not matched error level to debug - s += "&" + string(streams.CodecNotMatchedErrorCode) + "=" + zerolog.DebugLevel.String() + for _, v := range query["query"] { + s += "&" + v + } args.Input = inputTemplate("rtsp", s, query) } else if i = strings.Index(s, "?"); i > 0 { switch s[:i] { diff --git a/internal/rtsp/rtsp.go b/internal/rtsp/rtsp.go index 1bb41d83..0fe135f8 100644 --- a/internal/rtsp/rtsp.go +++ b/internal/rtsp/rtsp.go @@ -147,6 +147,7 @@ func tcpHandler(conn *rtsp.Conn) { var closer func() trace := log.Trace().Enabled() + level := zerolog.WarnLevel conn.Listen(func(msg any) { if trace { @@ -188,20 +189,18 @@ func tcpHandler(conn *rtsp.Conn) { conn.PacketSize = uint16(core.Atoi(s)) } + // param name like ffmpeg style https://ffmpeg.org/ffmpeg-protocols.html + if s := query.Get("log_level"); s != "" { + if lvl, err := zerolog.ParseLevel(s); err == nil { + level = lvl + } + } + // will help to protect looping requests to same source conn.Connection.Source = query.Get("source") if err := stream.AddConsumer(conn); err != nil { - logEvent := log.Warn() - - if err, ok := err.(*streams.ErrorWithErrorCode); ok { - level, parseErr := zerolog.ParseLevel(query.Get(err.Code())) - if parseErr == nil { - logEvent = log.WithLevel(level) - } - } - - logEvent.Err(err).Str("stream", name).Msg("[rtsp]") + log.WithLevel(level).Err(err).Str("stream", name).Msg("[rtsp]") return } @@ -239,7 +238,7 @@ func tcpHandler(conn *rtsp.Conn) { if err := conn.Accept(); err != nil { if err != io.EOF { - log.Warn().Err(err).Caller().Send() + log.WithLevel(level).Err(err).Caller().Send() } if closer != nil { closer() diff --git a/internal/streams/add_consumer.go b/internal/streams/add_consumer.go index efe8542b..d72e17ee 100644 --- a/internal/streams/add_consumer.go +++ b/internal/streams/add_consumer.go @@ -1,6 +1,7 @@ package streams import ( + "errors" "strings" "github.com/AlexxIT/go2rtc/pkg/core" @@ -124,7 +125,7 @@ func formatError(consMedias, prodMedias []*core.Media, prodErrors []error) error } if len(text) != 0 { - return &ErrorWithErrorCode{MultipleErrorCode, "streams: " + text} + return errors.New("streams: " + text) } // 2. Return "codecs not matched" @@ -147,11 +148,11 @@ func formatError(consMedias, prodMedias []*core.Media, prodErrors []error) error } } - return &ErrorWithErrorCode{CodecNotMatchedErrorCode, "streams: codecs not matched: " + prod + " => " + cons} + return errors.New("streams: codecs not matched: " + prod + " => " + cons) } // 3. Return unknown error - return &ErrorWithErrorCode{UnknownErrorCode, "streams: unknown error"} + return errors.New("streams: unknown error") } func appendString(s, elem string) string { @@ -163,24 +164,3 @@ func appendString(s, elem string) string { } return s + ", " + elem } - -type ErrorCode string - -const ( - CodecNotMatchedErrorCode ErrorCode = "codecNotMatched" - MultipleErrorCode ErrorCode = "multiple" - UnknownErrorCode ErrorCode = "unknown" -) - -type ErrorWithErrorCode struct { - code ErrorCode - message string -} - -func (e *ErrorWithErrorCode) Error() string { - return e.message -} - -func (e *ErrorWithErrorCode) Code() string { - return string(e.code) -}