diff --git a/internal/errordumper/dumper.go b/internal/errordumper/dumper.go index 0e73944f..0075154a 100644 --- a/internal/errordumper/dumper.go +++ b/internal/errordumper/dumper.go @@ -57,7 +57,8 @@ func (c *Dumper) run() { case <-t.C: c.mutex.Lock() - counter := c.counter + var counter uint64 + counter, c.counter = c.counter, 0 last := c.last c.mutex.Unlock() diff --git a/internal/stream/stream.go b/internal/stream/stream.go index a0dc3f1c..805cd668 100644 --- a/internal/stream/stream.go +++ b/internal/stream/stream.go @@ -11,7 +11,7 @@ import ( "github.com/bluenviron/gortsplib/v5/pkg/format" "github.com/pion/rtp" - "github.com/bluenviron/mediamtx/internal/counterdumper" + "github.com/bluenviron/mediamtx/internal/errordumper" "github.com/bluenviron/mediamtx/internal/logger" "github.com/bluenviron/mediamtx/internal/unit" ) @@ -33,7 +33,7 @@ type Stream struct { rtspStream *gortsplib.ServerStream rtspsStream *gortsplib.ServerStream readers map[*Reader]struct{} - processingErrors *counterdumper.Dumper + processingErrors *errordumper.Dumper } // Initialize initializes a Stream. @@ -43,16 +43,13 @@ func (s *Stream) Initialize() error { s.medias = make(map[*description.Media]*streamMedia) s.readers = make(map[*Reader]struct{}) - s.processingErrors = &counterdumper.Dumper{ - OnReport: func(val uint64) { - s.Parent.Log(logger.Warn, "%d processing %s", - val, - func() string { - if val == 1 { - return "error" - } - return "errors" - }()) + s.processingErrors = &errordumper.Dumper{ + OnReport: func(val uint64, last error) { + if val == 1 { + s.Parent.Log(logger.Warn, "processing error: %v", last) + } else { + s.Parent.Log(logger.Warn, "%d processing errors, last was: %v", val, last) + } }, } s.processingErrors.Start() diff --git a/internal/stream/stream_format.go b/internal/stream/stream_format.go index 5c625d38..b829201f 100644 --- a/internal/stream/stream_format.go +++ b/internal/stream/stream_format.go @@ -9,7 +9,7 @@ import ( "github.com/pion/rtp" "github.com/bluenviron/mediamtx/internal/codecprocessor" - "github.com/bluenviron/mediamtx/internal/counterdumper" + "github.com/bluenviron/mediamtx/internal/errordumper" "github.com/bluenviron/mediamtx/internal/logger" "github.com/bluenviron/mediamtx/internal/ntpestimator" "github.com/bluenviron/mediamtx/internal/unit" @@ -28,7 +28,7 @@ type streamFormat struct { format format.Format generateRTPPackets bool fillNTP bool - processingErrors *counterdumper.Dumper + processingErrors *errordumper.Dumper parent logger.Writer proc codecprocessor.Processor @@ -55,7 +55,7 @@ func (sf *streamFormat) initialize() error { func (sf *streamFormat) writeUnit(s *Stream, medi *description.Media, u *unit.Unit) { err := sf.proc.ProcessUnit(u) if err != nil { - sf.processingErrors.Increase() + sf.processingErrors.Add(err) return } @@ -79,7 +79,7 @@ func (sf *streamFormat) writeRTPPacket( err := sf.proc.ProcessRTPPacket(u, hasNonRTSPReaders) if err != nil { - sf.processingErrors.Increase() + sf.processingErrors.Add(err) return } diff --git a/internal/stream/stream_media.go b/internal/stream/stream_media.go index 3469f78a..0d9f43d1 100644 --- a/internal/stream/stream_media.go +++ b/internal/stream/stream_media.go @@ -3,7 +3,7 @@ package stream import ( "github.com/bluenviron/gortsplib/v5/pkg/description" "github.com/bluenviron/gortsplib/v5/pkg/format" - "github.com/bluenviron/mediamtx/internal/counterdumper" + "github.com/bluenviron/mediamtx/internal/errordumper" "github.com/bluenviron/mediamtx/internal/logger" ) @@ -12,7 +12,7 @@ type streamMedia struct { media *description.Media generateRTPPackets bool fillNTP bool - processingErrors *counterdumper.Dumper + processingErrors *errordumper.Dumper parent logger.Writer formats map[format.Format]*streamFormat