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}