Live video on the AT Protocol
at next 69 lines 2.7 kB view raw
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 remote.RemoteFixture("604bebf51c97f27aa07a8952462ac9885dd963f7a88375154217f59db32e1573/2025-11-18T01-10-56-292Z-signed-segment.mp4"), 19 } 20 withNoGSTLeaks(t, func() { 21 for _, segment := range segmentsWithoutBFrames { 22 // Open input file 23 inputFile, err := os.Open(segment) 24 require.NoError(t, err) 25 defer inputFile.Close() 26 bs, err := io.ReadAll(inputFile) 27 require.NoError(t, err) 28 29 ctx := log.WithDebugValue(context.Background(), map[string]map[string]int{"GStreamerFunc": {"ParseSegmentMediaData": 9}}) 30 mediaData, err := ParseSegmentMediaData(ctx, bs) 31 require.NoError(t, err) 32 require.NotNil(t, mediaData) 33 require.False(t, mediaData.Video[0].BFrames, "Video should not have BFrames") 34 require.Greater(t, mediaData.Duration, int64(0), "Video duration should not be empty") 35 } 36 }) 37} 38 39func TestMediaDataParserBFrames(t *testing.T) { 40 withNoGSTLeaks(t, func() { 41 inputFile, err := os.Open(remote.RemoteFixture("5ea6c4491bade0cdcad3770aa0b63b2cd7a580e233ee320d5bc2282503b26491/segment-with-bframes.mp4")) 42 require.NoError(t, err) 43 defer inputFile.Close() 44 bs, err := io.ReadAll(inputFile) 45 require.NoError(t, err) 46 47 ctx := log.WithDebugValue(context.Background(), map[string]map[string]int{"GStreamerFunc": {"ParseSegmentMediaData": 9}}) 48 mediaData, err := ParseSegmentMediaData(ctx, bs) 49 require.NoError(t, err) 50 require.NotNil(t, mediaData) 51 require.True(t, mediaData.Video[0].BFrames, "Video should have BFrames") 52 require.Greater(t, mediaData.Duration, int64(0), "Video duration should not be empty") 53 }) 54} 55 56func TestMediaDataParserVideoHeaderWithNoVideo(t *testing.T) { 57 withNoGSTLeaks(t, func() { 58 inputFile, err := os.Open(remote.RemoteFixture("0aa38ed08bb6b6b0ae5f4891a97244717e2c952d5ca878e34450729770f7ca53/2025-11-16T23-05-04-512Z-converge-segment-did-key-zQ3shkzEYN8UrJoRAGS6pgPodXjdg8kF2fXQNGfJhpg3x4KJT.mp4")) 59 require.NoError(t, err) 60 defer inputFile.Close() 61 bs, err := io.ReadAll(inputFile) 62 require.NoError(t, err) 63 64 ctx := log.WithDebugValue(context.Background(), map[string]map[string]int{"GStreamerFunc": {"ParseSegmentMediaData": 9}}) 65 mediaData, err := ParseSegmentMediaData(ctx, bs) 66 require.ErrorContains(t, err, "no video in segment") 67 require.Nil(t, mediaData) 68 }) 69}