Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
- /webrtc/RTCRtpReceiver-track-settings.tentative.html - WPT Dashboard Interop Dashboard
<!doctype html>
<meta charset=utf-8>
<title>RTCRtpReceiver.track.getSettings()</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="RTCPeerConnection-helper.js"></script>
<script>
'use strict';
promise_test(async t => {
if (!document.body) {
await new Promise(r => document.addEventListener("DOMContentLoaded", r, {once: true}));
}
const noiseStream = await getNoiseStream({video: true});
const [sendTrack] = noiseStream.getTracks();
const [canvas] = document.body.getElementsByTagName("canvas");
const ctx = canvas.getContext("2d");
const pc1 = new RTCPeerConnection();
t.add_cleanup(() => pc1.close());
const pc2 = new RTCPeerConnection();
t.add_cleanup(() => pc2.close());
// Send noise track.
const sender = pc1.addTrack(sendTrack);
const params = sender.getParameters();
params.degradationPreference = "maintain-resolution";
await sender.setParameters(params);
const haveTrackEvent = new Promise(r => pc2.ontrack = r);
exchangeIceCandidates(pc1, pc2);
await pc1.setLocalDescription();
await pc2.setRemoteDescription(pc1.localDescription);
await pc2.setLocalDescription();
await pc1.setRemoteDescription(pc2.localDescription);
const {track: recvTrack} = await haveTrackEvent;
assert_equals(recvTrack.getSettings().width, 0, "Receive track width setting is zero initially");
assert_equals(recvTrack.getSettings().height, 0, "Receive track height setting is zero initially");
// Display received track in video element for resize events.
const destVideo = document.createElement('video');
destVideo.autoplay = true;
destVideo.srcObject = new MediaStream([recvTrack]);
await new Promise(r => destVideo.onloadedmetadata = r);
assert_equals(recvTrack.getSettings().width, canvas.width, "Receive track width setting is set after receiving data");
assert_equals(recvTrack.getSettings().height, canvas.height, "Receive track height setting is set after receiving data");
canvas.width = 240;
canvas.height = 160;
await new Promise(r => destVideo.onresize = r);
assert_equals(recvTrack.getSettings().width, 240, "Receive track width setting is updated after resolution change");
assert_equals(recvTrack.getSettings().height, 160, "Receive track height setting is updated after resolution change");
}, "RTCRtpReceiver.track.getSettings() contains resolution entries");
</script>