Live video on the AT Protocol
1package media
2
3import (
4 "context"
5 "io"
6 "os"
7 "testing"
8 "time"
9
10 "github.com/stretchr/testify/require"
11 "go.uber.org/goleak"
12 "golang.org/x/sync/errgroup"
13 "stream.place/streamplace/pkg/bus"
14 "stream.place/streamplace/pkg/gstinit"
15)
16
17func TestPacketize(t *testing.T) {
18 gstinit.InitGST()
19 before := getLeakCount(t)
20 defer checkGStreamerLeaks(t, before)
21 ignore := goleak.IgnoreCurrent()
22 defer goleak.VerifyNone(t, ignore)
23
24 g, _ := errgroup.WithContext(context.Background())
25 for range streamplaceTestCount {
26 g.Go(func() error {
27 innerTestPacketize(t)
28 return nil
29 })
30 }
31 err := g.Wait()
32 require.NoError(t, err)
33}
34
35func innerTestPacketize(t *testing.T) {
36 filename := getFixture("sample-segment.mp4")
37 inputFile, err := os.Open(filename)
38 require.NoError(t, err)
39 defer inputFile.Close()
40
41 bs, err := io.ReadAll(inputFile)
42 require.NoError(t, err)
43
44 testSeg := &bus.Seg{
45 Data: bs,
46 Filepath: filename,
47 }
48
49 packet, err := Packetize(context.Background(), testSeg)
50 require.NoError(t, err)
51 require.NotNil(t, packet)
52 require.Equal(t, 49, len(packet.Video))
53 require.Equal(t, 40, len(packet.Audio))
54 require.Equal(t, time.Duration(800*time.Millisecond), packet.Duration)
55}