RTCRtpReceiver-track-settings.tentative.html (2524B)
1 <!doctype html> 2 <meta charset=utf-8> 3 <title>RTCRtpReceiver.track.getSettings()</title> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script src="RTCPeerConnection-helper.js"></script> 7 <script> 8 'use strict'; 9 10 // Tentative pending resolution of https://github.com/w3c/mediacapture-fromelement/issues/48. 11 12 promise_test(async t => { 13 if (!document.body) { 14 await new Promise(r => document.addEventListener("DOMContentLoaded", r, {once: true})); 15 } 16 const noiseStream = await getNoiseStream({video: true}); 17 const [sendTrack] = noiseStream.getTracks(); 18 const [canvas] = document.body.getElementsByTagName("canvas"); 19 const ctx = canvas.getContext("2d"); 20 21 const pc1 = new RTCPeerConnection(); 22 t.add_cleanup(() => pc1.close()); 23 const pc2 = new RTCPeerConnection(); 24 t.add_cleanup(() => pc2.close()); 25 26 // Send noise track. 27 const sender = pc1.addTrack(sendTrack); 28 const params = sender.getParameters(); 29 params.degradationPreference = "maintain-resolution"; 30 await sender.setParameters(params); 31 32 const haveTrackEvent = new Promise(r => pc2.ontrack = r); 33 exchangeIceCandidates(pc1, pc2); 34 await pc1.setLocalDescription(); 35 await pc2.setRemoteDescription(pc1.localDescription); 36 await pc2.setLocalDescription(); 37 await pc1.setRemoteDescription(pc2.localDescription); 38 39 const {track: recvTrack} = await haveTrackEvent; 40 assert_equals(recvTrack.getSettings().width, 0, "Receive track width setting is zero initially"); 41 assert_equals(recvTrack.getSettings().height, 0, "Receive track height setting is zero initially"); 42 43 // Display received track in video element for resize events. 44 const destVideo = document.createElement('video'); 45 destVideo.autoplay = true; 46 destVideo.srcObject = new MediaStream([recvTrack]); 47 await new Promise(r => destVideo.onloadedmetadata = r); 48 assert_equals(recvTrack.getSettings().width, canvas.width, "Receive track width setting is set after receiving data"); 49 assert_equals(recvTrack.getSettings().height, canvas.height, "Receive track height setting is set after receiving data"); 50 51 canvas.width = 240; 52 canvas.height = 160; 53 await new Promise(r => destVideo.onresize = r); 54 assert_equals(recvTrack.getSettings().width, 240, "Receive track width setting is updated after resolution change"); 55 assert_equals(recvTrack.getSettings().height, 160, "Receive track height setting is updated after resolution change"); 56 }, "RTCRtpReceiver.track.getSettings() contains resolution entries"); 57 </script>