Live video on the AT Protocol
1package media 2 3import ( 4 "context" 5 "io" 6 "os" 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 "stream.place/streamplace/pkg/log" 11 "stream.place/streamplace/test/remote" 12) 13 14func TestMediaDataParser(t *testing.T) { 15 segmentsWithoutBFrames := []string{ 16 remote.RemoteFixture("d63d26050db9a60c0944b4c2e2b1d052c4350a2a8a877324c7b0b7e7a0c1ae27/bframe-false-positive.mp4"), 17 getFixture("sample-segment.mp4"), 18 } 19 withNoGSTLeaks(t, func() { 20 for _, segment := range segmentsWithoutBFrames { 21 // Open input file 22 inputFile, err := os.Open(segment) 23 require.NoError(t, err) 24 defer inputFile.Close() 25 bs, err := io.ReadAll(inputFile) 26 require.NoError(t, err) 27 28 ctx := log.WithDebugValue(context.Background(), map[string]map[string]int{"GStreamerFunc": {"ParseSegmentMediaData": 9}}) 29 mediaData, err := ParseSegmentMediaData(ctx, bs) 30 require.NoError(t, err) 31 require.NotNil(t, mediaData) 32 require.False(t, mediaData.Video[0].BFrames, "Video should not have BFrames") 33 require.Greater(t, mediaData.Duration, int64(0), "Video duration should not be empty") 34 } 35 }) 36} 37 38func TestMediaDataParserBFrames(t *testing.T) { 39 withNoGSTLeaks(t, func() { 40 inputFile, err := os.Open(remote.RemoteFixture("5ea6c4491bade0cdcad3770aa0b63b2cd7a580e233ee320d5bc2282503b26491/segment-with-bframes.mp4")) 41 require.NoError(t, err) 42 defer inputFile.Close() 43 bs, err := io.ReadAll(inputFile) 44 require.NoError(t, err) 45 46 ctx := log.WithDebugValue(context.Background(), map[string]map[string]int{"GStreamerFunc": {"ParseSegmentMediaData": 9}}) 47 mediaData, err := ParseSegmentMediaData(ctx, bs) 48 require.NoError(t, err) 49 require.NotNil(t, mediaData) 50 require.True(t, mediaData.Video[0].BFrames, "Video should have BFrames") 51 require.Greater(t, mediaData.Duration, int64(0), "Video duration should not be empty") 52 }) 53}