Files
tubestation/testing/web-platform/tests/webrtc-svc/svc-helper.js
Blink WPT Bot 51185b4bb9 Bug 1880037 [wpt PR 44554] - webrtc wpt: update more tests to use receiver capabilities for setCodecPreferences, a=testonly
Automatic update from web-platform-tests
webrtc wpt: update more tests to use receiver capabilities for setCodecPreferences (#44554)

BUG=webrtc:15396

Change-Id: Icb67eacc4554c5cf356b12ff7e7306ac795c4f34
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5287360
Reviewed-by: Henrik Boström <hbos@chromium.org>
Commit-Queue: Philipp Hancke <phancke@microsoft.com>
Reviewed-by: Harald Alvestrand <hta@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1259818}

Co-authored-by: Philipp Hancke <phancke@microsoft.com>
--

wpt-commits: f664d06d7df6873725afed28af26e71e34e80d36
wpt-pr: 44554
2024-02-19 11:13:35 +00:00

53 lines
2.0 KiB
JavaScript

function supportsCodec(mimeType) {
return RTCRtpSender.getCapabilities('video').codecs.filter(c => c.mimeType == mimeType).length() > 0;
}
async function supportsScalabilityMode(mimeType, scalabilityMode) {
let result = await navigator.mediaCapabilities.encodingInfo({
type: 'webrtc',
video: {
contentType: mimeType,
width: 60,
height: 60,
bitrate: 10000,
framerate: 30,
scalabilityMode: scalabilityMode
}
});
return result.supported;
}
function createScalabilityTest(mimeType, scalabilityModes) {
for (const scalabilityMode of scalabilityModes) {
promise_test(async t => {
assert_implements_optional(
supportsScalabilityMode(mimeType, scalabilityMode),
`${mimeType} supported`
);
const v = document.createElement('video');
v.autoplay = true;
const pc1 = new RTCPeerConnection();
const pc2 = new RTCPeerConnection();
t.add_cleanup(() => pc1.close());
t.add_cleanup(() => pc2.close());
const stream1 = await getNoiseStream({ video: { signal: 100, width: 60, height: 60 } });
const [track1] = stream1.getTracks();
t.add_cleanup(() => track1.stop());
const transceiver = pc1.addTransceiver(track1, {
sendEncodings: [{ scalabilityMode: scalabilityMode }],
});
pc2.addEventListener('track', e => {
e.transceiver.setCodecPreferences(RTCRtpReceiver.getCapabilities('video').codecs.filter(c => c.mimeType == mimeType));
});
const haveTrackEvent = new Promise(r => pc2.ontrack = r);
exchangeIceCandidates(pc1, pc2);
await exchangeOfferAnswer(pc1, pc2);
v.srcObject = new MediaStream([(await haveTrackEvent).track]);
await new Promise(r => v.onloadedmetadata = r);
await detectSignal(t, v, 100);
const sendParams = pc1.getSenders()[0].getParameters();
assert_equals(sendParams.encodings[0].scalabilityMode, scalabilityMode);
}, `${mimeType} - ${scalabilityMode} should produce valid video content`);
}
}