Live video on the AT Protocol
79
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v0.8.13 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}