Skip to content

Commit

Permalink
log track ID when skipping tracks
Browse files Browse the repository at this point in the history
  • Loading branch information
aler9 committed Sep 26, 2024
1 parent 077040a commit b05b91b
Show file tree
Hide file tree
Showing 13 changed files with 132 additions and 54 deletions.
10 changes: 4 additions & 6 deletions internal/protocols/hls/from_stream.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,6 @@ func setupAudioTrack(
stream *stream.Stream,
writer *asyncwriter.Writer,
muxer *gohlslib.Muxer,
l logger.Writer,
) format.Format {
var audioFormatOpus *format.Opus
audioMedia := stream.Desc().FindFormat(&audioFormatOpus)
Expand Down Expand Up @@ -174,9 +173,7 @@ func setupAudioTrack(

if audioFormatMPEG4Audio != nil {
co := audioFormatMPEG4Audio.GetConfig()
if co == nil {
l.Log(logger.Warn, "skipping MPEG-4 audio track: tracks without explicit configuration are not supported")
} else {
if co != nil {

Check warning on line 176 in internal/protocols/hls/from_stream.go

View check run for this annotation

Codecov / codecov/patch

internal/protocols/hls/from_stream.go#L176

Added line #L176 was not covered by tests
stream.AddReader(writer, audioMedia, audioFormatMPEG4Audio, func(u unit.Unit) error {
tunit := u.(*unit.MPEG4Audio)

Expand Down Expand Up @@ -224,18 +221,19 @@ func FromStream(
stream,
writer,
muxer,
l,
)

if videoFormat == nil && audioFormat == nil {
return ErrNoSupportedCodecs
}

n := 1
for _, media := range stream.Desc().Medias {
for _, forma := range media.Formats {
if forma != videoFormat && forma != audioFormat {
l.Log(logger.Warn, "skipping track with codec %s", forma.Codec())
l.Log(logger.Warn, "skipping track %d (%s)", n, forma.Codec())
}
n++
}
}

Expand Down
4 changes: 2 additions & 2 deletions internal/protocols/hls/from_stream_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,9 @@ func TestFromStreamSkipUnsupportedTracks(t *testing.T) {
require.Equal(t, logger.Warn, l)
switch n {
case 0:
require.Equal(t, "skipping track with codec VP8", fmt.Sprintf(format, args...))
require.Equal(t, "skipping track 2 (VP8)", fmt.Sprintf(format, args...))
case 1:
require.Equal(t, "skipping track with codec MPEG-1/2 Audio", fmt.Sprintf(format, args...))
require.Equal(t, "skipping track 3 (MPEG-1/2 Audio)", fmt.Sprintf(format, args...))
}
n++
})
Expand Down
34 changes: 19 additions & 15 deletions internal/protocols/mpegts/from_stream.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,21 +33,22 @@ func FromStream(
) error {
var w *mcmpegts.Writer
var tracks []*mcmpegts.Track
var skippedFormats []format.Format
setuppedFormats := make(map[format.Format]struct{})

addTrack := func(codec mcmpegts.Codec) *mcmpegts.Track {
addTrack := func(forma format.Format, codec mcmpegts.Codec) *mcmpegts.Track {
track := &mcmpegts.Track{
Codec: codec,
}
tracks = append(tracks, track)
setuppedFormats[forma] = struct{}{}
return track
}

for _, medi := range stream.Desc().Medias {
for _, forma := range medi.Formats {
switch forma := forma.(type) {
case *format.H265: //nolint:dupl
track := addTrack(&mcmpegts.CodecH265{})
track := addTrack(forma, &mcmpegts.CodecH265{})

var dtsExtractor *h265.DTSExtractor

Expand Down Expand Up @@ -80,7 +81,7 @@ func FromStream(
})

case *format.H264: //nolint:dupl
track := addTrack(&mcmpegts.CodecH264{})
track := addTrack(forma, &mcmpegts.CodecH264{})

Check warning on line 84 in internal/protocols/mpegts/from_stream.go

View check run for this annotation

Codecov / codecov/patch

internal/protocols/mpegts/from_stream.go#L84

Added line #L84 was not covered by tests

var dtsExtractor *h264.DTSExtractor

Expand Down Expand Up @@ -113,7 +114,7 @@ func FromStream(
})

case *format.MPEG4Video:
track := addTrack(&mcmpegts.CodecMPEG4Video{})
track := addTrack(forma, &mcmpegts.CodecMPEG4Video{})

Check warning on line 117 in internal/protocols/mpegts/from_stream.go

View check run for this annotation

Codecov / codecov/patch

internal/protocols/mpegts/from_stream.go#L117

Added line #L117 was not covered by tests

firstReceived := false
var lastPTS time.Duration
Expand All @@ -140,7 +141,7 @@ func FromStream(
})

case *format.MPEG1Video:
track := addTrack(&mcmpegts.CodecMPEG1Video{})
track := addTrack(forma, &mcmpegts.CodecMPEG1Video{})

Check warning on line 144 in internal/protocols/mpegts/from_stream.go

View check run for this annotation

Codecov / codecov/patch

internal/protocols/mpegts/from_stream.go#L144

Added line #L144 was not covered by tests

firstReceived := false
var lastPTS time.Duration
Expand All @@ -167,7 +168,7 @@ func FromStream(
})

case *format.Opus:
track := addTrack(&mcmpegts.CodecOpus{
track := addTrack(forma, &mcmpegts.CodecOpus{

Check warning on line 171 in internal/protocols/mpegts/from_stream.go

View check run for this annotation

Codecov / codecov/patch

internal/protocols/mpegts/from_stream.go#L171

Added line #L171 was not covered by tests
ChannelCount: forma.ChannelCount,
})

Expand All @@ -191,7 +192,7 @@ func FromStream(
return fmt.Errorf("MPEG-4 audio tracks without explicit configuration are not supported")
}

track := addTrack(&mcmpegts.CodecMPEG4Audio{
track := addTrack(forma, &mcmpegts.CodecMPEG4Audio{

Check warning on line 195 in internal/protocols/mpegts/from_stream.go

View check run for this annotation

Codecov / codecov/patch

internal/protocols/mpegts/from_stream.go#L195

Added line #L195 was not covered by tests
Config: *co,
})

Expand All @@ -210,7 +211,7 @@ func FromStream(
})

case *format.MPEG1Audio:
track := addTrack(&mcmpegts.CodecMPEG1Audio{})
track := addTrack(forma, &mcmpegts.CodecMPEG1Audio{})

Check warning on line 214 in internal/protocols/mpegts/from_stream.go

View check run for this annotation

Codecov / codecov/patch

internal/protocols/mpegts/from_stream.go#L214

Added line #L214 was not covered by tests

stream.AddReader(writer, medi, forma, func(u unit.Unit) error {
tunit := u.(*unit.MPEG1Audio)
Expand All @@ -227,7 +228,7 @@ func FromStream(
})

case *format.AC3:
track := addTrack(&mcmpegts.CodecAC3{})
track := addTrack(forma, &mcmpegts.CodecAC3{})

Check warning on line 231 in internal/protocols/mpegts/from_stream.go

View check run for this annotation

Codecov / codecov/patch

internal/protocols/mpegts/from_stream.go#L231

Added line #L231 was not covered by tests

sampleRate := time.Duration(forma.SampleRate)

Expand All @@ -249,9 +250,6 @@ func FromStream(
}
return bw.Flush()
})

default:
skippedFormats = append(skippedFormats, forma)
}
}
}
Expand All @@ -260,8 +258,14 @@ func FromStream(
return errNoSupportedCodecs
}

for _, forma := range skippedFormats {
l.Log(logger.Warn, "skipping track with codec %s", forma.Codec())
n := 1
for _, medi := range stream.Desc().Medias {
for _, forma := range medi.Formats {
if _, ok := setuppedFormats[forma]; !ok {
l.Log(logger.Warn, "skipping track %d (%s)", n, forma.Codec())
}
n++
}
}

w = mcmpegts.NewWriter(bw, tracks)
Expand Down
2 changes: 1 addition & 1 deletion internal/protocols/mpegts/from_stream_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ func TestFromStreamSkipUnsupportedTracks(t *testing.T) {
l := test.Logger(func(l logger.Level, format string, args ...interface{}) {
require.Equal(t, logger.Warn, l)
if n == 0 {
require.Equal(t, "skipping track with codec VP8", fmt.Sprintf(format, args...))
require.Equal(t, "skipping track 2 (VP8)", fmt.Sprintf(format, args...))
}
n++
})
Expand Down
2 changes: 1 addition & 1 deletion internal/protocols/mpegts/to_stream.go
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ func ToStream(
}

for _, id := range unsupportedTracks {
l.Log(logger.Warn, "skipping track %d due to unsupported codec", id)
l.Log(logger.Warn, "skipping track %d (unsupported codec)", id)
}

return medias, nil
Expand Down
2 changes: 1 addition & 1 deletion internal/protocols/mpegts/to_stream_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ func TestToStreamSkipUnsupportedTracks(t *testing.T) {
l := test.Logger(func(l logger.Level, format string, args ...interface{}) {
require.Equal(t, logger.Warn, l)
if n == 0 {
require.Equal(t, "skipping track 1 due to unsupported codec", fmt.Sprintf(format, args...))
require.Equal(t, "skipping track 1 (unsupported codec)", fmt.Sprintf(format, args...))
}
n++
})
Expand Down
4 changes: 3 additions & 1 deletion internal/protocols/rtmp/from_stream.go
Original file line number Diff line number Diff line change
Expand Up @@ -202,11 +202,13 @@ func FromStream(
return err
}

n := 1
for _, media := range stream.Desc().Medias {
for _, forma := range media.Formats {
if forma != videoFormat && forma != audioFormat {
l.Log(logger.Warn, "skipping track with codec %s", forma.Codec())
l.Log(logger.Warn, "skipping track %d (%s)", n, forma.Codec())
}
n++
}
}

Expand Down
4 changes: 2 additions & 2 deletions internal/protocols/rtmp/from_stream_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,9 @@ func TestFromStreamSkipUnsupportedTracks(t *testing.T) {
require.Equal(t, logger.Warn, l)
switch n {
case 0:
require.Equal(t, "skipping track with codec VP8", fmt.Sprintf(format, args...))
require.Equal(t, "skipping track 1 (VP8)", fmt.Sprintf(format, args...))
case 1:
require.Equal(t, "skipping track with codec H264", fmt.Sprintf(format, args...))
require.Equal(t, "skipping track 3 (H264)", fmt.Sprintf(format, args...))
}
n++
})
Expand Down
4 changes: 3 additions & 1 deletion internal/protocols/webrtc/from_stream.go
Original file line number Diff line number Diff line change
Expand Up @@ -537,11 +537,13 @@ func FromStream(
return errNoSupportedCodecsFrom
}

n := 1
for _, media := range stream.Desc().Medias {
for _, forma := range media.Formats {
if forma != videoFormat && forma != audioFormat {
l.Log(logger.Warn, "skipping track with codec %s", forma.Codec())
l.Log(logger.Warn, "skipping track %d (%s)", n, forma.Codec())
}
n++
}
}

Expand Down
2 changes: 1 addition & 1 deletion internal/protocols/webrtc/from_stream_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ func TestFromStreamSkipUnsupportedTracks(t *testing.T) {
l := test.Logger(func(l logger.Level, format string, args ...interface{}) {
require.Equal(t, logger.Warn, l)
if n == 0 {
require.Equal(t, "skipping track with codec H265", fmt.Sprintf(format, args...))
require.Equal(t, "skipping track 2 (H265)", fmt.Sprintf(format, args...))
}
n++
})
Expand Down
28 changes: 15 additions & 13 deletions internal/recorder/format_fmp4.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,8 @@ type formatFMP4 struct {

func (f *formatFMP4) initialize() {
nextID := 1
var formats []rtspformat.Format
var skippedFormats []rtspformat.Format
var setuppedFormats []rtspformat.Format
setuppedFormatsMap := make(map[rtspformat.Format]struct{})

addTrack := func(format rtspformat.Format, codec fmp4.Codec) *formatFMP4Track {
initTrack := &fmp4.InitTrack{
Expand All @@ -127,7 +127,8 @@ func (f *formatFMP4) initialize() {
}

f.tracks = append(f.tracks, track)
formats = append(formats, format)
setuppedFormats = append(setuppedFormats, format)
setuppedFormatsMap[format] = struct{}{}
return track
}

Expand Down Expand Up @@ -597,9 +598,7 @@ func (f *formatFMP4) initialize() {

case *rtspformat.MPEG4Audio:
co := forma.GetConfig()
if co == nil {
f.ai.Log(logger.Warn, "skipping MPEG-4 audio track: tracks without explicit configuration are not supported")
} else {
if co != nil {
codec := &fmp4.CodecMPEG4Audio{
Config: *co,
}
Expand Down Expand Up @@ -804,24 +803,27 @@ func (f *formatFMP4) initialize() {
ntp: tunit.NTP,
})
})

default:
skippedFormats = append(skippedFormats, forma)
}
}
}

if len(formats) == 0 {
if len(setuppedFormats) == 0 {
f.ai.Log(logger.Warn, "no supported tracks found, skipping recording")
return
}

for _, forma := range skippedFormats {
f.ai.Log(logger.Warn, "skipping track with codec %s", forma.Codec())
n := 1
for _, medi := range f.ai.agent.Stream.Desc().Medias {
for _, forma := range medi.Formats {
if _, ok := setuppedFormatsMap[forma]; !ok {
f.ai.Log(logger.Warn, "skipping track %d (%s)", n, forma.Codec())
}
n++
}
}

f.ai.Log(logger.Info, "recording %s",
defs.FormatsInfo(formats))
defs.FormatsInfo(setuppedFormats))
}

func (f *formatFMP4) close() {
Expand Down
24 changes: 14 additions & 10 deletions internal/recorder/format_mpegts.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,16 +51,17 @@ type formatMPEGTS struct {

func (f *formatMPEGTS) initialize() {
var tracks []*mpegts.Track
var formats []rtspformat.Format
var skippedFormats []rtspformat.Format
var setuppedFormats []rtspformat.Format
setuppedFormatsMap := make(map[rtspformat.Format]struct{})

addTrack := func(format rtspformat.Format, codec mpegts.Codec) *mpegts.Track {
track := &mpegts.Track{
Codec: codec,
}

tracks = append(tracks, track)
formats = append(formats, format)
setuppedFormats = append(setuppedFormats, format)
setuppedFormatsMap[format] = struct{}{}
return track
}

Expand Down Expand Up @@ -303,28 +304,31 @@ func (f *formatMPEGTS) initialize() {
},
)
})

default:
skippedFormats = append(skippedFormats, forma)
}
}
}

if len(tracks) == 0 {
if len(setuppedFormats) == 0 {
f.ai.Log(logger.Warn, "no supported tracks found, skipping recording")
return
}

for _, forma := range skippedFormats {
f.ai.Log(logger.Warn, "skipping track with codec %s", forma.Codec())
n := 1
for _, medi := range f.ai.agent.Stream.Desc().Medias {
for _, forma := range medi.Formats {
if _, ok := setuppedFormatsMap[forma]; !ok {
f.ai.Log(logger.Warn, "skipping track %d (%s)", n, forma.Codec())
}
n++
}
}

f.dw = &dynamicWriter{}
f.bw = bufio.NewWriterSize(f.dw, mpegtsMaxBufferSize)
f.mw = mpegts.NewWriter(f.bw, tracks)

f.ai.Log(logger.Info, "recording %s",
defs.FormatsInfo(formats))
defs.FormatsInfo(setuppedFormats))
}

func (f *formatMPEGTS) close() {
Expand Down
Loading

0 comments on commit b05b91b

Please sign in to comment.