| <!doctype html> |
| <meta charset=utf-8> |
| <title>RTCRtpParameters encodings</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/webrtc/dictionary-helper.js"></script> |
| <script src="/webrtc/RTCRtpParameters-helper.js"></script> |
| <script> |
| 'use strict'; |
| |
| test(t => { |
| const pc = new RTCPeerConnection(); |
| t.add_cleanup(() => pc.close()); |
| assert_throws_js(RangeError, () => pc.addTransceiver('video', { |
| sendEncodings: [{ |
| maxFramerate: -10 |
| }] |
| })); |
| }, `addTransceiver() with sendEncoding.maxFramerate field set to less than 0 should reject with RangeError`); |
| |
| test(t => { |
| const pc = new RTCPeerConnection(); |
| t.add_cleanup(() => pc.close()); |
| let {sender} = pc.addTransceiver('audio', { |
| sendEncodings: [{ |
| maxFramerate: -10 |
| }] |
| }); |
| let encodings = sender.getParameters().encodings; |
| assert_equals(encodings.length, 1); |
| assert_not_own_property(encodings[0], "maxFramerate"); |
| |
| sender = pc.addTransceiver('audio', { |
| sendEncodings: [{ |
| maxFramerate: 10 |
| }] |
| }).sender; |
| encodings = sender.getParameters().encodings; |
| assert_equals(encodings.length, 1); |
| assert_not_own_property(encodings[0], "maxFramerate"); |
| }, `addTransceiver('audio') with sendEncoding.maxFramerate should succeed, but remove the maxFramerate, even if it is invalid`); |
| |
| promise_test(async t => { |
| const pc = new RTCPeerConnection(); |
| t.add_cleanup(() => pc.close()); |
| const {sender} = pc.addTransceiver('audio'); |
| let params = sender.getParameters(); |
| assert_equals(params.encodings.length, 1); |
| params.encodings[0].maxFramerate = 20; |
| await sender.setParameters(params); |
| const {encodings} = sender.getParameters(); |
| assert_equals(encodings.length, 1); |
| assert_not_own_property(encodings[0], "maxFramerate"); |
| }, `setParameters with maxFramerate on an audio sender should succeed, but remove the maxFramerate`); |
| |
| promise_test(async t => { |
| const pc = new RTCPeerConnection(); |
| t.add_cleanup(() => pc.close()); |
| const {sender} = pc.addTransceiver('audio'); |
| let params = sender.getParameters(); |
| assert_equals(params.encodings.length, 1); |
| params.encodings[0].maxFramerate = -1; |
| await sender.setParameters(params); |
| const {encodings} = sender.getParameters(); |
| assert_equals(encodings.length, 1); |
| assert_not_own_property(encodings[0], "maxFramerate"); |
| }, `setParameters with an invalid maxFramerate on an audio sender should succeed, but remove the maxFramerate`); |
| |
| promise_test(async t => { |
| const pc = new RTCPeerConnection(); |
| t.add_cleanup(() => pc.close()); |
| const { sender } = pc.addTransceiver('video'); |
| await doOfferAnswerExchange(t, pc); |
| |
| const param = sender.getParameters(); |
| const encoding = param.encodings[0]; |
| assert_not_own_property(encoding, "maxFramerate"); |
| |
| encoding.maxFramerate = -10; |
| return promise_rejects_js(t, RangeError, |
| sender.setParameters(param)); |
| }, `setParameters() with encoding.maxFramerate field set to less than 0 should reject with RangeError`); |
| |
| // It would be great if we could test to see whether maxFramerate is actually |
| // honored. |
| test_modified_encoding('video', 'maxFramerate', 24, 16, |
| 'setParameters() with maxFramerate 24->16 should succeed'); |
| |
| test_modified_encoding('video', 'maxFramerate', undefined, 16, |
| 'setParameters() with maxFramerate undefined->16 should succeed'); |
| |
| test_modified_encoding('video', 'maxFramerate', 24, undefined, |
| 'setParameters() with maxFramerate 24->undefined should succeed'); |
| |
| test_modified_encoding('video', 'maxFramerate', 0, 16, |
| 'setParameters() with maxFramerate 0->16 should succeed'); |
| |
| test_modified_encoding('video', 'maxFramerate', 24, 0, |
| 'setParameters() with maxFramerate 24->0 should succeed'); |
| |
| </script> |