Browse Source

limit logging of decode errors (#2253)

pull/2256/head
Alessandro Ros 2 years ago committed by GitHub
parent
commit
30b7245bb9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 16
      internal/core/async_writer.go
  2. 4
      internal/core/hls_source.go
  3. 30
      internal/core/limited_logger.go
  4. 2
      internal/core/path.go
  5. 19
      internal/core/rtsp_session.go
  6. 6
      internal/core/rtsp_source.go
  7. 6
      internal/core/srt_conn.go
  8. 6
      internal/core/srt_source.go
  9. 6
      internal/core/udp_source.go
  10. 6
      internal/formatprocessor/av1.go
  11. 2
      internal/formatprocessor/generic.go
  12. 2
      internal/formatprocessor/generic_test.go
  13. 4
      internal/formatprocessor/h264.go
  14. 6
      internal/formatprocessor/h264_test.go
  15. 4
      internal/formatprocessor/h265.go
  16. 6
      internal/formatprocessor/h265_test.go
  17. 4
      internal/formatprocessor/mpeg1audio.go
  18. 2
      internal/formatprocessor/mpeg4audio_generic.go
  19. 2
      internal/formatprocessor/mpeg4audio_latm.go
  20. 2
      internal/formatprocessor/opus.go
  21. 22
      internal/formatprocessor/processor.go
  22. 2
      internal/formatprocessor/vp8.go
  23. 2
      internal/formatprocessor/vp9.go
  24. 4
      internal/stream/stream.go
  25. 10
      internal/stream/stream_format.go
  26. 4
      internal/stream/stream_media.go

16
internal/core/async_writer.go

@ -2,7 +2,6 @@ package core
import ( import (
"fmt" "fmt"
"sync"
"time" "time"
"github.com/bluenviron/gortsplib/v4/pkg/ringbuffer" "github.com/bluenviron/gortsplib/v4/pkg/ringbuffer"
@ -15,11 +14,8 @@ const (
) )
type asyncWriter struct { type asyncWriter struct {
parent logger.Writer writeErrLogger logger.Writer
buffer *ringbuffer.RingBuffer buffer *ringbuffer.RingBuffer
prevWarnPrinted time.Time
prevWarnPrintedMutex sync.Mutex
// out // out
err chan error err chan error
@ -32,7 +28,7 @@ func newAsyncWriter(
buffer, _ := ringbuffer.New(uint64(queueSize)) buffer, _ := ringbuffer.New(uint64(queueSize))
return &asyncWriter{ return &asyncWriter{
parent: parent, writeErrLogger: newLimitedLogger(parent),
buffer: buffer, buffer: buffer,
err: make(chan error), err: make(chan error),
} }
@ -72,12 +68,6 @@ func (w *asyncWriter) runInner() error {
func (w *asyncWriter) push(cb func() error) { func (w *asyncWriter) push(cb func() error) {
ok := w.buffer.Push(cb) ok := w.buffer.Push(cb)
if !ok { if !ok {
now := time.Now() w.writeErrLogger.Log(logger.Warn, "write queue is full")
w.prevWarnPrintedMutex.Lock()
if now.Sub(w.prevWarnPrinted) >= minIntervalBetweenWarnings {
w.prevWarnPrinted = now
w.parent.Log(logger.Warn, "write queue is full")
}
w.prevWarnPrintedMutex.Unlock()
} }
} }

4
internal/core/hls_source.go

@ -48,6 +48,8 @@ func (s *hlsSource) run(ctx context.Context, cnf *conf.PathConf, reloadConf chan
} }
}() }()
decodeErrLogger := newLimitedLogger(s)
var c *gohlslib.Client var c *gohlslib.Client
c = &gohlslib.Client{ c = &gohlslib.Client{
URI: cnf.Source, URI: cnf.Source,
@ -66,7 +68,7 @@ func (s *hlsSource) run(ctx context.Context, cnf *conf.PathConf, reloadConf chan
s.Log(logger.Debug, "downloading segment %v", u) s.Log(logger.Debug, "downloading segment %v", u)
}, },
OnDecodeError: func(err error) { OnDecodeError: func(err error) {
s.Log(logger.Warn, err.Error()) decodeErrLogger.Log(logger.Warn, err.Error())
}, },
OnTracks: func(tracks []*gohlslib.Track) error { OnTracks: func(tracks []*gohlslib.Track) error {
var medias []*description.Media var medias []*description.Media

30
internal/core/limited_logger.go

@ -0,0 +1,30 @@
package core
import (
"sync"
"time"
"github.com/bluenviron/mediamtx/internal/logger"
)
type limitedLogger struct {
w logger.Writer
mutex sync.Mutex
lastPrinted time.Time
}
func newLimitedLogger(w logger.Writer) *limitedLogger {
return &limitedLogger{
w: w,
}
}
func (l *limitedLogger) Log(level logger.Level, format string, args ...interface{}) {
now := time.Now()
l.mutex.Lock()
if now.Sub(l.lastPrinted) >= minIntervalBetweenWarnings {
l.lastPrinted = now
l.w.Log(level, format, args...)
}
l.mutex.Unlock()
}

2
internal/core/path.go

@ -595,7 +595,7 @@ func (pa *path) setReady(desc *description.Session, allocateEncoder bool) error
desc, desc,
allocateEncoder, allocateEncoder,
pa.bytesReceived, pa.bytesReceived,
pa.source, newLimitedLogger(pa.source),
) )
if err != nil { if err != nil {
return err return err

19
internal/core/rtsp_session.go

@ -49,8 +49,8 @@ type rtspSession struct {
state gortsplib.ServerSessionState state gortsplib.ServerSessionState
transport *gortsplib.Transport transport *gortsplib.Transport
pathName string pathName string
prevWarnPrinted time.Time decodeErrLogger logger.Writer
prevWarnPrintedMutex sync.Mutex writeErrLogger logger.Writer
} }
func newRTSPSession( func newRTSPSession(
@ -74,6 +74,9 @@ func newRTSPSession(
created: time.Now(), created: time.Now(),
} }
s.decodeErrLogger = newLimitedLogger(s)
s.writeErrLogger = newLimitedLogger(s)
s.Log(logger.Info, "created by %v", s.author.NetConn().RemoteAddr()) s.Log(logger.Info, "created by %v", s.author.NetConn().RemoteAddr())
return s return s
@ -402,23 +405,17 @@ func (s *rtspSession) apiSourceDescribe() pathAPISourceOrReader {
// onPacketLost is called by rtspServer. // onPacketLost is called by rtspServer.
func (s *rtspSession) onPacketLost(ctx *gortsplib.ServerHandlerOnPacketLostCtx) { func (s *rtspSession) onPacketLost(ctx *gortsplib.ServerHandlerOnPacketLostCtx) {
s.Log(logger.Warn, ctx.Error.Error()) s.decodeErrLogger.Log(logger.Warn, ctx.Error.Error())
} }
// onDecodeError is called by rtspServer. // onDecodeError is called by rtspServer.
func (s *rtspSession) onDecodeError(ctx *gortsplib.ServerHandlerOnDecodeErrorCtx) { func (s *rtspSession) onDecodeError(ctx *gortsplib.ServerHandlerOnDecodeErrorCtx) {
s.Log(logger.Warn, ctx.Error.Error()) s.decodeErrLogger.Log(logger.Warn, ctx.Error.Error())
} }
// onStreamWriteError is called by rtspServer. // onStreamWriteError is called by rtspServer.
func (s *rtspSession) onStreamWriteError(ctx *gortsplib.ServerHandlerOnStreamWriteErrorCtx) { func (s *rtspSession) onStreamWriteError(ctx *gortsplib.ServerHandlerOnStreamWriteErrorCtx) {
now := time.Now() s.writeErrLogger.Log(logger.Warn, ctx.Error.Error())
s.prevWarnPrintedMutex.Lock()
if now.Sub(s.prevWarnPrinted) >= minIntervalBetweenWarnings {
s.prevWarnPrinted = now
s.Log(logger.Warn, ctx.Error.Error())
}
s.prevWarnPrintedMutex.Unlock()
} }
func (s *rtspSession) apiItem() *apiRTSPSession { func (s *rtspSession) apiItem() *apiRTSPSession {

6
internal/core/rtsp_source.go

@ -94,6 +94,8 @@ func (s *rtspSource) Log(level logger.Level, format string, args ...interface{})
func (s *rtspSource) run(ctx context.Context, cnf *conf.PathConf, reloadConf chan *conf.PathConf) error { func (s *rtspSource) run(ctx context.Context, cnf *conf.PathConf, reloadConf chan *conf.PathConf) error {
s.Log(logger.Debug, "connecting") s.Log(logger.Debug, "connecting")
decodeErrLogger := newLimitedLogger(s)
c := &gortsplib.Client{ c := &gortsplib.Client{
Transport: cnf.SourceProtocol.Transport, Transport: cnf.SourceProtocol.Transport,
TLSConfig: tlsConfigForFingerprint(cnf.SourceFingerprint), TLSConfig: tlsConfigForFingerprint(cnf.SourceFingerprint),
@ -111,10 +113,10 @@ func (s *rtspSource) run(ctx context.Context, cnf *conf.PathConf, reloadConf cha
s.Log(logger.Warn, err.Error()) s.Log(logger.Warn, err.Error())
}, },
OnPacketLost: func(err error) { OnPacketLost: func(err error) {
s.Log(logger.Warn, err.Error()) decodeErrLogger.Log(logger.Warn, err.Error())
}, },
OnDecodeError: func(err error) { OnDecodeError: func(err error) {
s.Log(logger.Warn, err.Error()) decodeErrLogger.Log(logger.Warn, err.Error())
}, },
} }

6
internal/core/srt_conn.go

@ -234,6 +234,12 @@ func (c *srtConn) runPublishReader(sconn srt.Conn, path *path) error {
return err return err
} }
decodeErrLogger := newLimitedLogger(c)
r.OnDecodeError(func(err error) {
decodeErrLogger.Log(logger.Warn, err.Error())
})
var medias []*description.Media //nolint:prealloc var medias []*description.Media //nolint:prealloc
var stream *stream.Stream var stream *stream.Stream

6
internal/core/srt_source.go

@ -91,6 +91,12 @@ func (s *srtSource) runReader(sconn srt.Conn) error {
return err return err
} }
decodeErrLogger := newLimitedLogger(s)
r.OnDecodeError(func(err error) {
decodeErrLogger.Log(logger.Warn, err.Error())
})
var medias []*description.Media //nolint:prealloc var medias []*description.Media //nolint:prealloc
var stream *stream.Stream var stream *stream.Stream

6
internal/core/udp_source.go

@ -140,6 +140,12 @@ func (s *udpSource) runReader(pc net.PacketConn) error {
return err return err
} }
decodeErrLogger := newLimitedLogger(s)
r.OnDecodeError(func(err error) {
decodeErrLogger.Log(logger.Warn, err.Error())
})
var medias []*description.Media //nolint:prealloc var medias []*description.Media //nolint:prealloc
var stream *stream.Stream var stream *stream.Stream

6
internal/formatprocessor/av1.go

@ -1,4 +1,4 @@
package formatprocessor package formatprocessor //nolint:dupl
import ( import (
"fmt" "fmt"
@ -8,14 +8,12 @@ import (
"github.com/bluenviron/gortsplib/v4/pkg/format/rtpav1" "github.com/bluenviron/gortsplib/v4/pkg/format/rtpav1"
"github.com/pion/rtp" "github.com/pion/rtp"
"github.com/bluenviron/mediamtx/internal/logger"
"github.com/bluenviron/mediamtx/internal/unit" "github.com/bluenviron/mediamtx/internal/unit"
) )
type formatProcessorAV1 struct { type formatProcessorAV1 struct {
udpMaxPayloadSize int udpMaxPayloadSize int
format *format.AV1 format *format.AV1
log logger.Writer
encoder *rtpav1.Encoder encoder *rtpav1.Encoder
decoder *rtpav1.Decoder decoder *rtpav1.Decoder
@ -25,12 +23,10 @@ func newAV1(
udpMaxPayloadSize int, udpMaxPayloadSize int,
forma *format.AV1, forma *format.AV1,
generateRTPPackets bool, generateRTPPackets bool,
log logger.Writer,
) (*formatProcessorAV1, error) { ) (*formatProcessorAV1, error) {
t := &formatProcessorAV1{ t := &formatProcessorAV1{
udpMaxPayloadSize: udpMaxPayloadSize, udpMaxPayloadSize: udpMaxPayloadSize,
format: forma, format: forma,
log: log,
} }
if generateRTPPackets { if generateRTPPackets {

2
internal/formatprocessor/generic.go

@ -7,7 +7,6 @@ import (
"github.com/bluenviron/gortsplib/v4/pkg/format" "github.com/bluenviron/gortsplib/v4/pkg/format"
"github.com/pion/rtp" "github.com/pion/rtp"
"github.com/bluenviron/mediamtx/internal/logger"
"github.com/bluenviron/mediamtx/internal/unit" "github.com/bluenviron/mediamtx/internal/unit"
) )
@ -19,7 +18,6 @@ func newGeneric(
udpMaxPayloadSize int, udpMaxPayloadSize int,
forma format.Format, forma format.Format,
generateRTPPackets bool, generateRTPPackets bool,
_ logger.Writer,
) (*formatProcessorGeneric, error) { ) (*formatProcessorGeneric, error) {
if generateRTPPackets { if generateRTPPackets {
return nil, fmt.Errorf("we don't know how to generate RTP packets of format %+v", forma) return nil, fmt.Errorf("we don't know how to generate RTP packets of format %+v", forma)

2
internal/formatprocessor/generic_test.go

@ -18,7 +18,7 @@ func TestGenericRemovePadding(t *testing.T) {
err := forma.Init() err := forma.Init()
require.NoError(t, err) require.NoError(t, err)
p, err := New(1472, forma, false, nil) p, err := New(1472, forma, false)
require.NoError(t, err) require.NoError(t, err)
pkt := &rtp.Packet{ pkt := &rtp.Packet{

4
internal/formatprocessor/h264.go

@ -9,7 +9,6 @@ import (
"github.com/bluenviron/mediacommon/pkg/codecs/h264" "github.com/bluenviron/mediacommon/pkg/codecs/h264"
"github.com/pion/rtp" "github.com/pion/rtp"
"github.com/bluenviron/mediamtx/internal/logger"
"github.com/bluenviron/mediamtx/internal/unit" "github.com/bluenviron/mediamtx/internal/unit"
) )
@ -73,7 +72,6 @@ func rtpH264ExtractSPSPPS(pkt *rtp.Packet) ([]byte, []byte) {
type formatProcessorH264 struct { type formatProcessorH264 struct {
udpMaxPayloadSize int udpMaxPayloadSize int
format *format.H264 format *format.H264
log logger.Writer
encoder *rtph264.Encoder encoder *rtph264.Encoder
decoder *rtph264.Decoder decoder *rtph264.Decoder
@ -83,12 +81,10 @@ func newH264(
udpMaxPayloadSize int, udpMaxPayloadSize int,
forma *format.H264, forma *format.H264,
generateRTPPackets bool, generateRTPPackets bool,
log logger.Writer,
) (*formatProcessorH264, error) { ) (*formatProcessorH264, error) {
t := &formatProcessorH264{ t := &formatProcessorH264{
udpMaxPayloadSize: udpMaxPayloadSize, udpMaxPayloadSize: udpMaxPayloadSize,
format: forma, format: forma,
log: log,
} }
if generateRTPPackets { if generateRTPPackets {

6
internal/formatprocessor/h264_test.go

@ -18,7 +18,7 @@ func TestH264DynamicParams(t *testing.T) {
PacketizationMode: 1, PacketizationMode: 1,
} }
p, err := New(1472, forma, false, nil) p, err := New(1472, forma, false)
require.NoError(t, err) require.NoError(t, err)
enc, err := forma.CreateEncoder() enc, err := forma.CreateEncoder()
@ -88,7 +88,7 @@ func TestH264OversizedPackets(t *testing.T) {
PacketizationMode: 1, PacketizationMode: 1,
} }
p, err := New(1472, forma, false, nil) p, err := New(1472, forma, false)
require.NoError(t, err) require.NoError(t, err)
var out []*rtp.Packet var out []*rtp.Packet
@ -191,7 +191,7 @@ func TestH264EmptyPacket(t *testing.T) {
PacketizationMode: 1, PacketizationMode: 1,
} }
p, err := New(1472, forma, true, nil) p, err := New(1472, forma, true)
require.NoError(t, err) require.NoError(t, err)
unit := &unit.H264{ unit := &unit.H264{

4
internal/formatprocessor/h265.go

@ -9,7 +9,6 @@ import (
"github.com/bluenviron/mediacommon/pkg/codecs/h265" "github.com/bluenviron/mediacommon/pkg/codecs/h265"
"github.com/pion/rtp" "github.com/pion/rtp"
"github.com/bluenviron/mediamtx/internal/logger"
"github.com/bluenviron/mediamtx/internal/unit" "github.com/bluenviron/mediamtx/internal/unit"
) )
@ -80,7 +79,6 @@ func rtpH265ExtractVPSSPSPPS(pkt *rtp.Packet) ([]byte, []byte, []byte) {
type formatProcessorH265 struct { type formatProcessorH265 struct {
udpMaxPayloadSize int udpMaxPayloadSize int
format *format.H265 format *format.H265
log logger.Writer
encoder *rtph265.Encoder encoder *rtph265.Encoder
decoder *rtph265.Decoder decoder *rtph265.Decoder
@ -90,12 +88,10 @@ func newH265(
udpMaxPayloadSize int, udpMaxPayloadSize int,
forma *format.H265, forma *format.H265,
generateRTPPackets bool, generateRTPPackets bool,
log logger.Writer,
) (*formatProcessorH265, error) { ) (*formatProcessorH265, error) {
t := &formatProcessorH265{ t := &formatProcessorH265{
udpMaxPayloadSize: udpMaxPayloadSize, udpMaxPayloadSize: udpMaxPayloadSize,
format: forma, format: forma,
log: log,
} }
if generateRTPPackets { if generateRTPPackets {

6
internal/formatprocessor/h265_test.go

@ -17,7 +17,7 @@ func TestH265DynamicParams(t *testing.T) {
PayloadTyp: 96, PayloadTyp: 96,
} }
p, err := New(1472, forma, false, nil) p, err := New(1472, forma, false)
require.NoError(t, err) require.NoError(t, err)
enc, err := forma.CreateEncoder() enc, err := forma.CreateEncoder()
@ -99,7 +99,7 @@ func TestH265OversizedPackets(t *testing.T) {
PPS: []byte{byte(h265.NALUType_PPS_NUT) << 1, 16, 17, 18}, PPS: []byte{byte(h265.NALUType_PPS_NUT) << 1, 16, 17, 18},
} }
p, err := New(1472, forma, false, nil) p, err := New(1472, forma, false)
require.NoError(t, err) require.NoError(t, err)
var out []*rtp.Packet var out []*rtp.Packet
@ -189,7 +189,7 @@ func TestH265EmptyPacket(t *testing.T) {
PayloadTyp: 96, PayloadTyp: 96,
} }
p, err := New(1472, forma, true, nil) p, err := New(1472, forma, true)
require.NoError(t, err) require.NoError(t, err)
unit := &unit.H265{ unit := &unit.H265{

4
internal/formatprocessor/mpeg1audio.go

@ -1,4 +1,4 @@
package formatprocessor package formatprocessor //nolint:dupl
import ( import (
"fmt" "fmt"
@ -8,7 +8,6 @@ import (
"github.com/bluenviron/gortsplib/v4/pkg/format/rtpmpeg1audio" "github.com/bluenviron/gortsplib/v4/pkg/format/rtpmpeg1audio"
"github.com/pion/rtp" "github.com/pion/rtp"
"github.com/bluenviron/mediamtx/internal/logger"
"github.com/bluenviron/mediamtx/internal/unit" "github.com/bluenviron/mediamtx/internal/unit"
) )
@ -23,7 +22,6 @@ func newMPEG1Audio(
udpMaxPayloadSize int, udpMaxPayloadSize int,
forma *format.MPEG1Audio, forma *format.MPEG1Audio,
generateRTPPackets bool, generateRTPPackets bool,
_ logger.Writer,
) (*formatProcessorMPEG1Audio, error) { ) (*formatProcessorMPEG1Audio, error) {
t := &formatProcessorMPEG1Audio{ t := &formatProcessorMPEG1Audio{
udpMaxPayloadSize: udpMaxPayloadSize, udpMaxPayloadSize: udpMaxPayloadSize,

2
internal/formatprocessor/mpeg4audio_generic.go

@ -8,7 +8,6 @@ import (
"github.com/bluenviron/gortsplib/v4/pkg/format/rtpmpeg4audio" "github.com/bluenviron/gortsplib/v4/pkg/format/rtpmpeg4audio"
"github.com/pion/rtp" "github.com/pion/rtp"
"github.com/bluenviron/mediamtx/internal/logger"
"github.com/bluenviron/mediamtx/internal/unit" "github.com/bluenviron/mediamtx/internal/unit"
) )
@ -23,7 +22,6 @@ func newMPEG4AudioGeneric(
udpMaxPayloadSize int, udpMaxPayloadSize int,
forma *format.MPEG4Audio, forma *format.MPEG4Audio,
generateRTPPackets bool, generateRTPPackets bool,
_ logger.Writer,
) (*formatProcessorMPEG4AudioGeneric, error) { ) (*formatProcessorMPEG4AudioGeneric, error) {
t := &formatProcessorMPEG4AudioGeneric{ t := &formatProcessorMPEG4AudioGeneric{
udpMaxPayloadSize: udpMaxPayloadSize, udpMaxPayloadSize: udpMaxPayloadSize,

2
internal/formatprocessor/mpeg4audio_latm.go

@ -8,7 +8,6 @@ import (
"github.com/bluenviron/gortsplib/v4/pkg/format/rtpmpeg4audiolatm" "github.com/bluenviron/gortsplib/v4/pkg/format/rtpmpeg4audiolatm"
"github.com/pion/rtp" "github.com/pion/rtp"
"github.com/bluenviron/mediamtx/internal/logger"
"github.com/bluenviron/mediamtx/internal/unit" "github.com/bluenviron/mediamtx/internal/unit"
) )
@ -23,7 +22,6 @@ func newMPEG4AudioLATM(
udpMaxPayloadSize int, udpMaxPayloadSize int,
forma *format.MPEG4AudioLATM, forma *format.MPEG4AudioLATM,
generateRTPPackets bool, generateRTPPackets bool,
_ logger.Writer,
) (*formatProcessorMPEG4AudioLATM, error) { ) (*formatProcessorMPEG4AudioLATM, error) {
t := &formatProcessorMPEG4AudioLATM{ t := &formatProcessorMPEG4AudioLATM{
udpMaxPayloadSize: udpMaxPayloadSize, udpMaxPayloadSize: udpMaxPayloadSize,

2
internal/formatprocessor/opus.go

@ -9,7 +9,6 @@ import (
"github.com/bluenviron/mediacommon/pkg/codecs/opus" "github.com/bluenviron/mediacommon/pkg/codecs/opus"
"github.com/pion/rtp" "github.com/pion/rtp"
"github.com/bluenviron/mediamtx/internal/logger"
"github.com/bluenviron/mediamtx/internal/unit" "github.com/bluenviron/mediamtx/internal/unit"
) )
@ -24,7 +23,6 @@ func newOpus(
udpMaxPayloadSize int, udpMaxPayloadSize int,
forma *format.Opus, forma *format.Opus,
generateRTPPackets bool, generateRTPPackets bool,
_ logger.Writer,
) (*formatProcessorOpus, error) { ) (*formatProcessorOpus, error) {
t := &formatProcessorOpus{ t := &formatProcessorOpus{
udpMaxPayloadSize: udpMaxPayloadSize, udpMaxPayloadSize: udpMaxPayloadSize,

22
internal/formatprocessor/processor.go

@ -7,7 +7,6 @@ import (
"github.com/bluenviron/gortsplib/v4/pkg/format" "github.com/bluenviron/gortsplib/v4/pkg/format"
"github.com/pion/rtp" "github.com/pion/rtp"
"github.com/bluenviron/mediamtx/internal/logger"
"github.com/bluenviron/mediamtx/internal/unit" "github.com/bluenviron/mediamtx/internal/unit"
) )
@ -45,37 +44,36 @@ func New(
udpMaxPayloadSize int, udpMaxPayloadSize int,
forma format.Format, forma format.Format,
generateRTPPackets bool, generateRTPPackets bool,
log logger.Writer,
) (Processor, error) { ) (Processor, error) {
switch forma := forma.(type) { switch forma := forma.(type) {
case *format.H264: case *format.H264:
return newH264(udpMaxPayloadSize, forma, generateRTPPackets, log) return newH264(udpMaxPayloadSize, forma, generateRTPPackets)
case *format.H265: case *format.H265:
return newH265(udpMaxPayloadSize, forma, generateRTPPackets, log) return newH265(udpMaxPayloadSize, forma, generateRTPPackets)
case *format.VP8: case *format.VP8:
return newVP8(udpMaxPayloadSize, forma, generateRTPPackets, log) return newVP8(udpMaxPayloadSize, forma, generateRTPPackets)
case *format.VP9: case *format.VP9:
return newVP9(udpMaxPayloadSize, forma, generateRTPPackets, log) return newVP9(udpMaxPayloadSize, forma, generateRTPPackets)
case *format.AV1: case *format.AV1:
return newAV1(udpMaxPayloadSize, forma, generateRTPPackets, log) return newAV1(udpMaxPayloadSize, forma, generateRTPPackets)
case *format.MPEG1Audio: case *format.MPEG1Audio:
return newMPEG1Audio(udpMaxPayloadSize, forma, generateRTPPackets, log) return newMPEG1Audio(udpMaxPayloadSize, forma, generateRTPPackets)
case *format.MPEG4AudioGeneric: case *format.MPEG4AudioGeneric:
return newMPEG4AudioGeneric(udpMaxPayloadSize, forma, generateRTPPackets, log) return newMPEG4AudioGeneric(udpMaxPayloadSize, forma, generateRTPPackets)
case *format.MPEG4AudioLATM: case *format.MPEG4AudioLATM:
return newMPEG4AudioLATM(udpMaxPayloadSize, forma, generateRTPPackets, log) return newMPEG4AudioLATM(udpMaxPayloadSize, forma, generateRTPPackets)
case *format.Opus: case *format.Opus:
return newOpus(udpMaxPayloadSize, forma, generateRTPPackets, log) return newOpus(udpMaxPayloadSize, forma, generateRTPPackets)
default: default:
return newGeneric(udpMaxPayloadSize, forma, generateRTPPackets, log) return newGeneric(udpMaxPayloadSize, forma, generateRTPPackets)
} }
} }

2
internal/formatprocessor/vp8.go

@ -8,7 +8,6 @@ import (
"github.com/bluenviron/gortsplib/v4/pkg/format/rtpvp8" "github.com/bluenviron/gortsplib/v4/pkg/format/rtpvp8"
"github.com/pion/rtp" "github.com/pion/rtp"
"github.com/bluenviron/mediamtx/internal/logger"
"github.com/bluenviron/mediamtx/internal/unit" "github.com/bluenviron/mediamtx/internal/unit"
) )
@ -23,7 +22,6 @@ func newVP8(
udpMaxPayloadSize int, udpMaxPayloadSize int,
forma *format.VP8, forma *format.VP8,
generateRTPPackets bool, generateRTPPackets bool,
_ logger.Writer,
) (*formatProcessorVP8, error) { ) (*formatProcessorVP8, error) {
t := &formatProcessorVP8{ t := &formatProcessorVP8{
udpMaxPayloadSize: udpMaxPayloadSize, udpMaxPayloadSize: udpMaxPayloadSize,

2
internal/formatprocessor/vp9.go

@ -8,7 +8,6 @@ import (
"github.com/bluenviron/gortsplib/v4/pkg/format/rtpvp9" "github.com/bluenviron/gortsplib/v4/pkg/format/rtpvp9"
"github.com/pion/rtp" "github.com/pion/rtp"
"github.com/bluenviron/mediamtx/internal/logger"
"github.com/bluenviron/mediamtx/internal/unit" "github.com/bluenviron/mediamtx/internal/unit"
) )
@ -23,7 +22,6 @@ func newVP9(
udpMaxPayloadSize int, udpMaxPayloadSize int,
forma *format.VP9, forma *format.VP9,
generateRTPPackets bool, generateRTPPackets bool,
_ logger.Writer,
) (*formatProcessorVP9, error) { ) (*formatProcessorVP9, error) {
t := &formatProcessorVP9{ t := &formatProcessorVP9{
udpMaxPayloadSize: udpMaxPayloadSize, udpMaxPayloadSize: udpMaxPayloadSize,

4
internal/stream/stream.go

@ -32,7 +32,7 @@ func New(
desc *description.Session, desc *description.Session,
generateRTPPackets bool, generateRTPPackets bool,
bytesReceived *uint64, bytesReceived *uint64,
source logger.Writer, decodeErrLogger logger.Writer,
) (*Stream, error) { ) (*Stream, error) {
s := &Stream{ s := &Stream{
bytesReceived: bytesReceived, bytesReceived: bytesReceived,
@ -43,7 +43,7 @@ func New(
for _, media := range desc.Medias { for _, media := range desc.Medias {
var err error var err error
s.smedias[media], err = newStreamMedia(udpMaxPayloadSize, media, generateRTPPackets, source) s.smedias[media], err = newStreamMedia(udpMaxPayloadSize, media, generateRTPPackets, decodeErrLogger)
if err != nil { if err != nil {
return nil, err return nil, err
} }

10
internal/stream/stream_format.go

@ -14,7 +14,7 @@ import (
) )
type streamFormat struct { type streamFormat struct {
source logger.Writer decodeErrLogger logger.Writer
proc formatprocessor.Processor proc formatprocessor.Processor
nonRTSPReaders map[interface{}]func(unit.Unit) nonRTSPReaders map[interface{}]func(unit.Unit)
} }
@ -23,15 +23,15 @@ func newStreamFormat(
udpMaxPayloadSize int, udpMaxPayloadSize int,
forma format.Format, forma format.Format,
generateRTPPackets bool, generateRTPPackets bool,
source logger.Writer, decodeErrLogger logger.Writer,
) (*streamFormat, error) { ) (*streamFormat, error) {
proc, err := formatprocessor.New(udpMaxPayloadSize, forma, generateRTPPackets, source) proc, err := formatprocessor.New(udpMaxPayloadSize, forma, generateRTPPackets)
if err != nil { if err != nil {
return nil, err return nil, err
} }
sf := &streamFormat{ sf := &streamFormat{
source: source, decodeErrLogger: decodeErrLogger,
proc: proc, proc: proc,
nonRTSPReaders: make(map[interface{}]func(unit.Unit)), nonRTSPReaders: make(map[interface{}]func(unit.Unit)),
} }
@ -52,7 +52,7 @@ func (sf *streamFormat) writeUnit(s *Stream, medi *description.Media, data unit.
err := sf.proc.Process(data, hasNonRTSPReaders) err := sf.proc.Process(data, hasNonRTSPReaders)
if err != nil { if err != nil {
sf.source.Log(logger.Warn, err.Error()) sf.decodeErrLogger.Log(logger.Warn, err.Error())
return return
} }

4
internal/stream/stream_media.go

@ -14,7 +14,7 @@ type streamMedia struct {
func newStreamMedia(udpMaxPayloadSize int, func newStreamMedia(udpMaxPayloadSize int,
medi *description.Media, medi *description.Media,
generateRTPPackets bool, generateRTPPackets bool,
source logger.Writer, decodeErrLogger logger.Writer,
) (*streamMedia, error) { ) (*streamMedia, error) {
sm := &streamMedia{ sm := &streamMedia{
formats: make(map[format.Format]*streamFormat), formats: make(map[format.Format]*streamFormat),
@ -22,7 +22,7 @@ func newStreamMedia(udpMaxPayloadSize int,
for _, forma := range medi.Formats { for _, forma := range medi.Formats {
var err error var err error
sm.formats[forma], err = newStreamFormat(udpMaxPayloadSize, forma, generateRTPPackets, source) sm.formats[forma], err = newStreamFormat(udpMaxPayloadSize, forma, generateRTPPackets, decodeErrLogger)
if err != nil { if err != nil {
return nil, err return nil, err
} }

Loading…
Cancel
Save