@@ -271,6 +271,37 @@ func BenchmarkTrackLocalWrite(b *testing.B) {
271271 }
272272}
273273
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+
274305func Test_TrackLocalStatic_Padding (t * testing.T ) {
275306 mediaEngineOne := & MediaEngine {}
276307 assert .NoError (t , mediaEngineOne .RegisterCodec (RTPCodecParameters {
@@ -333,6 +364,10 @@ func Test_TrackLocalStatic_Padding(t *testing.T) {
333364
334365 exit := false
335366
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+
336371 for ! exit {
337372 select {
338373 case <- time .After (1 * time .Millisecond ):
@@ -343,6 +378,8 @@ func Test_TrackLocalStatic_Padding(t *testing.T) {
343378 }
344379
345380 closePairNow (t , offerer , answerer )
381+
382+ assert .Equal (t , [3 ]bool {true , true , true }, packetizer .checked )
346383}
347384
348385func Test_TrackLocalStatic_RTX (t * testing.T ) {
0 commit comments