RTCRtpReceiver-getParameters.html (4705B)
1 <!doctype html> 2 <meta charset=utf-8> 3 <title>RTCRtpReceiver.prototype.getParameters</title> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script src="dictionary-helper.js"></script> 7 <script src="RTCPeerConnection-helper.js"></script> 8 <script src="RTCRtpParameters-helper.js"></script> 9 <script> 10 'use strict'; 11 12 // Test is based on the following editor draft: 13 // https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html 14 15 // The following helper functions are called from RTCRtpParameters-helper.js: 16 // validateReceiverRtpParameters 17 18 /* 19 Validates the RTCRtpParameters returned from RTCRtpReceiver.prototype.getParameters 20 21 5.3. RTCRtpReceiver Interface 22 getParameters 23 When getParameters is called, the RTCRtpParameters dictionary is constructed 24 as follows: 25 26 - The headerExtensions sequence is populated based on the header extensions that 27 the receiver is currently prepared to receive. 28 29 - The codecs sequence is populated based on the codecs that the receiver is currently 30 prepared to receive. 31 32 - rtcp.reducedSize is set to true if the receiver is currently prepared to receive 33 reduced-size RTCP packets, and false otherwise. rtcp.cname is left undefined. 34 */ 35 promise_test(async t => { 36 const pc = new RTCPeerConnection(); 37 t.add_cleanup(() => pc.close()); 38 pc.addTransceiver('audio'); 39 const callee = await doOfferAnswerExchange(t, pc); 40 const param = callee.getTransceivers()[0].receiver.getParameters(); 41 validateReceiverRtpParameters(param); 42 43 assert_greater_than(param.headerExtensions.length, 0); 44 assert_greater_than(param.codecs.length, 0); 45 }, 'getParameters() with audio receiver'); 46 47 promise_test(async t => { 48 const pc = new RTCPeerConnection(); 49 t.add_cleanup(() => pc.close()); 50 pc.addTransceiver('video'); 51 const callee = await doOfferAnswerExchange(t, pc); 52 const param = callee.getTransceivers()[0].receiver.getParameters(); 53 validateReceiverRtpParameters(param); 54 55 assert_greater_than(param.headerExtensions.length, 0); 56 assert_greater_than(param.codecs.length, 0); 57 }, 'getParameters() with video receiver'); 58 59 promise_test(async t => { 60 const pc = new RTCPeerConnection(); 61 t.add_cleanup(() => pc.close()); 62 pc.addTransceiver('video', { 63 sendEncodings: [ 64 { rid: "rid1" }, 65 { rid: "rid2" } 66 ] 67 }); 68 const callee = await doOfferAnswerExchange(t, pc); 69 const param = callee.getTransceivers()[0].receiver.getParameters(); 70 validateReceiverRtpParameters(param); 71 assert_greater_than(param.headerExtensions.length, 0); 72 assert_greater_than(param.codecs.length, 0); 73 }, 'getParameters() with simulcast video receiver'); 74 75 promise_test(async t => { 76 const stream = await getNoiseStream({video: true}); 77 t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); 78 const [track] = stream.getTracks(); 79 const caller = new RTCPeerConnection(); 80 t.add_cleanup(() => caller.close()); 81 caller.addTrack(track); 82 const callee = new RTCPeerConnection(); 83 t.add_cleanup(() => callee.close()); 84 callee.addTrack(track); 85 var callerReceiver = caller.getTransceivers()[0].receiver; 86 assert_equals(callerReceiver.getParameters().codecs.length, 0); 87 assert_equals(callerReceiver.getParameters().headerExtensions.length, 0, 88 "no caller header extensions before offer"); 89 const offer = await caller.createOffer(); 90 await caller.setLocalDescription(offer); 91 await callee.setRemoteDescription(offer); 92 var calleeReceiver = callee.getTransceivers()[0].receiver; 93 // Callee transceiver exists only after offer - population of parameters 94 // should only occur after answer. 95 assert_equals(calleeReceiver.getParameters().headerExtensions.length, 0, 96 "no callee header extensions before answer"); 97 assert_equals(calleeReceiver.getParameters().codecs.length, 0); 98 const answer = await callee.createAnswer(); 99 await callee.setLocalDescription(answer); 100 assert_greater_than(calleeReceiver.getParameters().codecs.length, 0, 101 "callee codecs after answer"); 102 await caller.setRemoteDescription(answer); 103 assert_greater_than(callerReceiver.getParameters().codecs.length, 0, 104 "caller codecs after answer"); 105 assert_greater_than(callerReceiver.getParameters().headerExtensions.length, 0, 106 "caller header extensions after O/A"); 107 assert_greater_than(calleeReceiver.getParameters().headerExtensions.length, 0, 108 "callee header extensions after O/A"); 109 }, 'getParameters() surfaces codecs on two-way receiver at the right time'); 110 111 </script>