@@ -271,6 +271,37 @@ func BenchmarkTrackLocalWrite(b *testing.B) {
271
271
}
272
272
}
273
273
274
+ type TestPacketizer struct {
275
+ rtp.Packetizer
276
+ checked [3 ]bool
277
+ }
278
+
279
+ func (p * TestPacketizer ) GeneratePadding (samples uint32 ) []* rtp.Packet {
280
+ packets := p .Packetizer .GeneratePadding (samples )
281
+ for _ , packet := range packets {
282
+ // Reset padding to ensure we control it
283
+ packet .Header .PaddingSize = 0
284
+ packet .PaddingSize = 0
285
+ packet .Payload = nil
286
+
287
+ p .checked [packet .SequenceNumber % 3 ] = true
288
+ switch packet .SequenceNumber % 3 {
289
+ case 0 :
290
+ // Recommended way to add padding
291
+ packet .Header .PaddingSize = 255
292
+ case 1 :
293
+ // This was used as a workaround so has to be supported too
294
+ packet .Payload = make ([]byte , 255 )
295
+ packet .Payload [254 ] = 255
296
+ case 2 :
297
+ // This field is deprecated but still used by some clients
298
+ packet .PaddingSize = 255
299
+ }
300
+ }
301
+
302
+ return packets
303
+ }
304
+
274
305
func Test_TrackLocalStatic_Padding (t * testing.T ) {
275
306
mediaEngineOne := & MediaEngine {}
276
307
assert .NoError (t , mediaEngineOne .RegisterCodec (RTPCodecParameters {
@@ -333,6 +364,10 @@ func Test_TrackLocalStatic_Padding(t *testing.T) {
333
364
334
365
exit := false
335
366
367
+ // Use a custom packetizer that generates packets with padding in a few different ways
368
+ packetizer := & TestPacketizer {Packetizer : track .packetizer }
369
+ track .packetizer = packetizer
370
+
336
371
for ! exit {
337
372
select {
338
373
case <- time .After (1 * time .Millisecond ):
@@ -343,6 +378,8 @@ func Test_TrackLocalStatic_Padding(t *testing.T) {
343
378
}
344
379
345
380
closePairNow (t , offerer , answerer )
381
+
382
+ assert .Equal (t , [3 ]bool {true , true , true }, packetizer .checked )
346
383
}
347
384
348
385
func Test_TrackLocalStatic_RTX (t * testing.T ) {
0 commit comments