@@ -308,8 +308,18 @@ a=rtpmap:96 VP8/90000
308
308
o=- 4596489990601351948 2 IN IP4 127.0.0.1
309
309
s=-
310
310
t=0 0
311
- m=video 60323 UDP/TLS/RTP/SAVPF 94 96 97
311
+ m=video 60323 UDP/TLS/RTP/SAVPF 94 95 106 107 108 109 96 97
312
312
a=rtpmap:94 VP8/90000
313
+ a=rtpmap:95 rtx/90000
314
+ a=fmtp:95 apt=94
315
+ a=rtpmap:106 H264/90000
316
+ a=fmtp:106 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
317
+ a=rtpmap:107 rtx/90000
318
+ a=fmtp:107 apt=106
319
+ a=rtpmap:108 H264/90000
320
+ a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f
321
+ a=rtpmap:109 rtx/90000
322
+ a=fmtp:109 apt=108
313
323
a=rtpmap:96 VP9/90000
314
324
a=fmtp:96 profile-id=2
315
325
a=rtpmap:97 rtx/90000
@@ -318,22 +328,64 @@ a=fmtp:97 apt=96
318
328
m := MediaEngine {}
319
329
assert .NoError (t , m .RegisterCodec (RTPCodecParameters {
320
330
RTPCodecCapability : RTPCodecCapability {MimeTypeVP8 , 90000 , 0 , "" , nil },
321
- PayloadType : 94 ,
322
- }, RTPCodecTypeVideo ))
323
- assert .NoError (t , m .RegisterCodec (RTPCodecParameters {
324
- RTPCodecCapability : RTPCodecCapability {MimeTypeVP9 , 90000 , 0 , "profile-id=2" , nil },
325
331
PayloadType : 96 ,
326
332
}, RTPCodecTypeVideo ))
327
333
assert .NoError (t , m .RegisterCodec (RTPCodecParameters {
328
334
RTPCodecCapability : RTPCodecCapability {"video/rtx" , 90000 , 0 , "apt=96" , nil },
329
335
PayloadType : 97 ,
330
336
}, RTPCodecTypeVideo ))
337
+ assert .NoError (t , m .RegisterCodec (RTPCodecParameters {
338
+ RTPCodecCapability : RTPCodecCapability {MimeTypeH264 , 90000 , 0 , "level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f" , nil },
339
+ PayloadType : 102 ,
340
+ }, RTPCodecTypeVideo ))
341
+ assert .NoError (t , m .RegisterCodec (RTPCodecParameters {
342
+ RTPCodecCapability : RTPCodecCapability {"video/rtx" , 90000 , 0 , "apt=102" , nil },
343
+ PayloadType : 103 ,
344
+ }, RTPCodecTypeVideo ))
345
+ assert .NoError (t , m .RegisterCodec (RTPCodecParameters {
346
+ RTPCodecCapability : RTPCodecCapability {MimeTypeH264 , 90000 , 0 , "level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f" , nil },
347
+ PayloadType : 104 ,
348
+ }, RTPCodecTypeVideo ))
349
+ assert .NoError (t , m .RegisterCodec (RTPCodecParameters {
350
+ RTPCodecCapability : RTPCodecCapability {"video/rtx" , 90000 , 0 , "apt=104" , nil },
351
+ PayloadType : 105 ,
352
+ }, RTPCodecTypeVideo ))
353
+ assert .NoError (t , m .RegisterCodec (RTPCodecParameters {
354
+ RTPCodecCapability : RTPCodecCapability {MimeTypeVP9 , 90000 , 0 , "profile-id=2" , nil },
355
+ PayloadType : 98 ,
356
+ }, RTPCodecTypeVideo ))
357
+ assert .NoError (t , m .RegisterCodec (RTPCodecParameters {
358
+ RTPCodecCapability : RTPCodecCapability {"video/rtx" , 90000 , 0 , "apt=98" , nil },
359
+ PayloadType : 99 ,
360
+ }, RTPCodecTypeVideo ))
331
361
assert .NoError (t , m .updateFromRemoteDescription (mustParse (profileLevels )))
332
362
333
363
assert .True (t , m .negotiatedVideo )
334
364
335
- _ , _ , err := m .getCodecByPayload (97 )
365
+ vp9Codec , _ , err := m .getCodecByPayload (96 )
366
+ assert .NoError (t , err )
367
+ assert .Equal (t , vp9Codec .MimeType , MimeTypeVP9 )
368
+ vp9RTX , _ , err := m .getCodecByPayload (97 )
369
+ assert .NoError (t , err )
370
+ assert .Equal (t , vp9RTX .MimeType , "video/rtx" )
371
+
372
+ h264P1Codec , _ , err := m .getCodecByPayload (106 )
373
+ assert .NoError (t , err )
374
+ assert .Equal (t , h264P1Codec .MimeType , MimeTypeH264 )
375
+ assert .Equal (t , h264P1Codec .SDPFmtpLine , "level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f" )
376
+ h264P1RTX , _ , err := m .getCodecByPayload (107 )
377
+ assert .NoError (t , err )
378
+ assert .Equal (t , h264P1RTX .MimeType , "video/rtx" )
379
+ assert .Equal (t , h264P1RTX .SDPFmtpLine , "apt=106" )
380
+
381
+ h264P0Codec , _ , err := m .getCodecByPayload (108 )
382
+ assert .NoError (t , err )
383
+ assert .Equal (t , h264P0Codec .MimeType , MimeTypeH264 )
384
+ assert .Equal (t , h264P0Codec .SDPFmtpLine , "level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f" )
385
+ h264P0RTX , _ , err := m .getCodecByPayload (109 )
336
386
assert .NoError (t , err )
387
+ assert .Equal (t , h264P0RTX .MimeType , "video/rtx" )
388
+ assert .Equal (t , h264P0RTX .SDPFmtpLine , "apt=108" )
337
389
})
338
390
339
391
t .Run ("Matches when rtx apt for partial match codec" , func (t * testing.T ) {
0 commit comments