RTCRtpParameters-maxFramerate.html (3729B)
1 <!doctype html> 2 <meta charset=utf-8> 3 <title>RTCRtpParameters encodings</title> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script src="/webrtc/dictionary-helper.js"></script> 7 <script src="/webrtc/RTCRtpParameters-helper.js"></script> 8 <script> 9 'use strict'; 10 11 test(t => { 12 const pc = new RTCPeerConnection(); 13 t.add_cleanup(() => pc.close()); 14 assert_throws_js(RangeError, () => pc.addTransceiver('video', { 15 sendEncodings: [{ 16 maxFramerate: -10 17 }] 18 })); 19 }, `addTransceiver() with sendEncoding.maxFramerate field set to less than 0 should reject with RangeError`); 20 21 test(t => { 22 const pc = new RTCPeerConnection(); 23 t.add_cleanup(() => pc.close()); 24 let {sender} = pc.addTransceiver('audio', { 25 sendEncodings: [{ 26 maxFramerate: -10 27 }] 28 }); 29 let encodings = sender.getParameters().encodings; 30 assert_equals(encodings.length, 1); 31 assert_not_own_property(encodings[0], "maxFramerate"); 32 33 sender = pc.addTransceiver('audio', { 34 sendEncodings: [{ 35 maxFramerate: 10 36 }] 37 }).sender; 38 encodings = sender.getParameters().encodings; 39 assert_equals(encodings.length, 1); 40 assert_not_own_property(encodings[0], "maxFramerate"); 41 }, `addTransceiver('audio') with sendEncoding.maxFramerate should succeed, but remove the maxFramerate, even if it is invalid`); 42 43 promise_test(async t => { 44 const pc = new RTCPeerConnection(); 45 t.add_cleanup(() => pc.close()); 46 const {sender} = pc.addTransceiver('audio'); 47 let params = sender.getParameters(); 48 assert_equals(params.encodings.length, 1); 49 params.encodings[0].maxFramerate = 20; 50 await sender.setParameters(params); 51 const {encodings} = sender.getParameters(); 52 assert_equals(encodings.length, 1); 53 assert_not_own_property(encodings[0], "maxFramerate"); 54 }, `setParameters with maxFramerate on an audio sender should succeed, but remove the maxFramerate`); 55 56 promise_test(async t => { 57 const pc = new RTCPeerConnection(); 58 t.add_cleanup(() => pc.close()); 59 const {sender} = pc.addTransceiver('audio'); 60 let params = sender.getParameters(); 61 assert_equals(params.encodings.length, 1); 62 params.encodings[0].maxFramerate = -1; 63 await sender.setParameters(params); 64 const {encodings} = sender.getParameters(); 65 assert_equals(encodings.length, 1); 66 assert_not_own_property(encodings[0], "maxFramerate"); 67 }, `setParameters with an invalid maxFramerate on an audio sender should succeed, but remove the maxFramerate`); 68 69 promise_test(async t => { 70 const pc = new RTCPeerConnection(); 71 t.add_cleanup(() => pc.close()); 72 const { sender } = pc.addTransceiver('video'); 73 await doOfferAnswerExchange(t, pc); 74 75 const param = sender.getParameters(); 76 const encoding = param.encodings[0]; 77 assert_not_own_property(encoding, "maxFramerate"); 78 79 encoding.maxFramerate = -10; 80 return promise_rejects_js(t, RangeError, 81 sender.setParameters(param)); 82 }, `setParameters() with encoding.maxFramerate field set to less than 0 should reject with RangeError`); 83 84 // It would be great if we could test to see whether maxFramerate is actually 85 // honored. 86 test_modified_encoding('video', 'maxFramerate', 24, 16, 87 'setParameters() with maxFramerate 24->16 should succeed'); 88 89 test_modified_encoding('video', 'maxFramerate', undefined, 16, 90 'setParameters() with maxFramerate undefined->16 should succeed'); 91 92 test_modified_encoding('video', 'maxFramerate', 24, undefined, 93 'setParameters() with maxFramerate 24->undefined should succeed'); 94 95 test_modified_encoding('video', 'maxFramerate', 0, 16, 96 'setParameters() with maxFramerate 0->16 should succeed'); 97 98 test_modified_encoding('video', 'maxFramerate', 24, 0, 99 'setParameters() with maxFramerate 24->0 should succeed'); 100 101 </script>