Live video on the AT Protocol
1package media
2
3// var RTCRecTestCases = []struct {
4// name string
5// fatalErrors bool
6// fixture string
7// expectedSegmentsMin int
8// expectedSegmentsMax int
9// }{
10// {
11// name: "IntermittentTracks",
12// fatalErrors: false,
13// fixture: getFixture("intermittent-tracks.cbor"),
14// expectedSegmentsMin: 10,
15// expectedSegmentsMax: 15,
16// },
17// {
18// name: "SegmentConvergenceIssues",
19// fatalErrors: true,
20// fixture: remote.RemoteFixture("6a1fb84e3c23405fc53161f59d5b837839c4889fc1a96533c82fb44fafc51d27/2025-11-14T22-41-20-399Z.cbor"),
21// expectedSegmentsMin: 1,
22// expectedSegmentsMax: 10,
23// },
24// {
25// name: "NekomimiPet",
26// fixture: remote.RemoteFixture("91176de4b92fb4c8e84116bd2be0070e96f964fcb8e127da4bfa7020317f4195/nekomimi.pet.rtcrec.cbor"),
27// fatalErrors: true,
28// expectedSegmentsMin: 29,
29// expectedSegmentsMax: 29,
30// },
31// }
32
33// func TestRTCRecording(t *testing.T) {
34
35// previous := FatalSegmentationErrors
36// defer func() {
37// FatalSegmentationErrors = previous
38// }()
39// // ctx := context.Background()
40// // mm, ms := getStaticTestMediaManager(t)
41// for _, testCase := range RTCRecTestCases {
42// t.Run(testCase.name, func(t *testing.T) {
43// withNoGSTLeaks(t, func() {
44// ctx := context.Background()
45// dir, err := os.MkdirTemp("", "rtcrec-test-*")
46// require.NoError(t, err)
47// defer os.RemoveAll(dir)
48// cli := &config.CLI{}
49// fs := cli.NewFlagSet("rtcrec-test")
50// err = cli.Parse(fs, []string{
51// "--data-dir", dir,
52// "-wide-open=true",
53// "--segment-debug-dir", "/home/iameli/testvids/nekomimi.pet",
54// })
55// require.NoError(t, err)
56// mm, err := MakeMediaManager(context.Background(), cli, nil, nil, nil, nil)
57// require.NoError(t, err)
58// priv, pub, err := spkey.GenerateStreamKey()
59// require.NoError(t, err)
60// signer, err := spkey.KeyToSigner(priv)
61// require.NoError(t, err)
62// mediaSigner, err := MakeMediaSigner(ctx, cli, pub.DIDKey(), signer, nil)
63// require.NoError(t, err)
64
65// segsub := mm.NewSegment()
66// segCount := 0
67// go func() {
68// for range segsub {
69// segCount++
70// }
71// }()
72
73// cur := goleak.IgnoreCurrent()
74// defer goleak.VerifyNone(t, cur)
75
76// FatalSegmentationErrors = testCase.fatalErrors
77// fd, err := os.Open(testCase.fixture)
78// require.NoError(t, err)
79// defer fd.Close()
80// pc, err := rtcrec.NewReplayPeerConnection(ctx, fd)
81// require.NoError(t, err)
82// done := make(chan error)
83// _, err = mm.WebRTCIngest(ctx, &webrtc.SessionDescription{SDP: "placeholder"}, mediaSigner, pc, done)
84// require.NoError(t, err)
85// // fmt.Println(answer.SDP)
86// <-done
87
88// // the segment getting ingested is ever so slightly after the done, which doesn't matter except in tests, just do a backoff for checking
89// ticker := backoff.NewTicker(backoff.NewExponentialBackOff())
90// defer ticker.Stop()
91// for i := 0; i < 10; i++ {
92// if segCount >= testCase.expectedSegmentsMin {
93// break
94// }
95// if i < 9 {
96// <-ticker.C
97// }
98// }
99// require.GreaterOrEqual(t, segCount, testCase.expectedSegmentsMin)
100// require.LessOrEqual(t, segCount, testCase.expectedSegmentsMax)
101// })
102// })
103// }
104
105// }