mirror of
https://github.com/servo/servo.git
synced 2025-07-01 04:23:39 +01:00
136 lines
4.8 KiB
HTML
136 lines
4.8 KiB
HTML
<!doctype html>
|
|
<meta charset=utf-8>
|
|
<title>RTCRtpTransceiver.prototype.setCodecPreferences</title>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script>
|
|
'use strict';
|
|
|
|
// Test is based on the following editor draft:
|
|
// https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html
|
|
|
|
/*
|
|
5.4. RTCRtpTransceiver Interface
|
|
interface RTCRtpTransceiver {
|
|
...
|
|
void setCodecPreferences(sequence<RTCRtpCodecCapability> codecs);
|
|
};
|
|
|
|
setCodecPreferences
|
|
- Setting codecs to an empty sequence resets codec preferences to any
|
|
default value.
|
|
|
|
- The codecs sequence passed into setCodecPreferences can only contain
|
|
codecs that are returned by RTCRtpSender.getCapabilities(kind) or
|
|
RTCRtpReceiver.getCapabilities(kind), where kind is the kind of the
|
|
RTCRtpTransceiver on which the method is called. Additionally, the
|
|
RTCRtpCodecParameters dictionary members cannot be modified. If
|
|
codecs does not fulfill these requirements, the user agent MUST throw
|
|
an InvalidAccessError.
|
|
*/
|
|
|
|
test(() => {
|
|
const pc = new RTCPeerConnection();
|
|
const transceiver = pc.addTransceiver('audio');
|
|
const capabilities = RTCRtpSender.getCapabilities('audio');
|
|
transceiver.setCodecPreferences(capabilities.codecs);
|
|
|
|
}, `setCodecPreferences() on audio transceiver with codecs returned from RTCRtpSender.getCapabilities('audio') should succeed`);
|
|
|
|
test(() => {
|
|
const pc = new RTCPeerConnection();
|
|
const transceiver = pc.addTransceiver('video');
|
|
const capabilities = RTCRtpReceiver.getCapabilities('video');
|
|
transceiver.setCodecPreferences(capabilities.codecs);
|
|
|
|
}, `setCodecPreferences() on video transceiver with codecs returned from RTCRtpReceiver.getCapabilities('video') should succeed`);
|
|
|
|
test(() => {
|
|
const pc = new RTCPeerConnection();
|
|
const transceiver = pc.addTransceiver('audio');
|
|
const capabilities1 = RTCRtpSender.getCapabilities('audio');
|
|
const capabilities2 = RTCRtpReceiver.getCapabilities('audio');
|
|
transceiver.setCodecPreferences([...capabilities1.codecs, ... capabilities2.codecs]);
|
|
|
|
}, `setCodecPreferences() with both sender receiver codecs combined should succeed`);
|
|
|
|
test(() => {
|
|
const pc = new RTCPeerConnection();
|
|
const transceiver = pc.addTransceiver('audio');
|
|
transceiver.setCodecPreferences([]);
|
|
|
|
}, `setCodecPreferences([]) should succeed`);
|
|
|
|
test(() => {
|
|
const pc = new RTCPeerConnection();
|
|
const transceiver = pc.addTransceiver('audio');
|
|
const capabilities = RTCRtpSender.getCapabilities('audio');
|
|
const { codecs } = capabilities;
|
|
|
|
if(codecs.length >= 2) {
|
|
const tmp = codecs[0];
|
|
codecs[0] = codecs[1];
|
|
codecs[1] = tmp;
|
|
}
|
|
|
|
transceiver.setCodecPreferences(codecs);
|
|
|
|
}, `setCodecPreferences() with reordered codecs should succeed`);
|
|
|
|
test(() => {
|
|
const pc = new RTCPeerConnection();
|
|
const transceiver = pc.addTransceiver('audio');
|
|
const capabilities = RTCRtpSender.getCapabilities('video');
|
|
assert_throws(() => transceiver.setCodecPreferences(capabilities.codecs));
|
|
|
|
}, `setCodecPreferences() on audio transceiver with codecs returned from getCapabilities('video') should throw InvalidAccessError`);
|
|
|
|
test(() => {
|
|
const pc = new RTCPeerConnection();
|
|
const transceiver = pc.addTransceiver('audio');
|
|
const codecs = [{
|
|
mimeType: 'audio/piepiper',
|
|
clockRate: 2000,
|
|
channels: 2,
|
|
sdpFmtpLine: 'a=fmtp:98 0-15'
|
|
}];
|
|
|
|
assert_throws(() => transceiver.setCodecPreferences(codecs));
|
|
|
|
}, `setCodecPreferences() with user defined codec should throw InvalidAccessError`);
|
|
|
|
test(() => {
|
|
const pc = new RTCPeerConnection();
|
|
const transceiver = pc.addTransceiver('audio');
|
|
const capabilities = RTCRtpSender.getCapabilities('audio');
|
|
const codecs = [
|
|
...capabilities.codecs,
|
|
{
|
|
mimeType: 'audio/piepiper',
|
|
clockRate: 2000,
|
|
channels: 2,
|
|
sdpFmtpLine: 'a=fmtp:98 0-15'
|
|
}];
|
|
|
|
assert_throws(() => transceiver.setCodecPreferences(codecs));
|
|
|
|
}, `setCodecPreferences() with user defined codec together with codecs returned from getCapabilities() should throw InvalidAccessError`);
|
|
|
|
test(() => {
|
|
const pc = new RTCPeerConnection();
|
|
const transceiver = pc.addTransceiver('audio');
|
|
const capabilities = RTCRtpSender.getCapabilities('audio');
|
|
|
|
const { codecs } = capabilities;
|
|
assert_greater_than(codecs.length, 0,
|
|
'Expect at least one codec available');
|
|
|
|
const [ codec ] = codecs;
|
|
const { channels=2 } = codec;
|
|
codec.channels = channels+1;
|
|
|
|
assert_throws(() => transceiver.setCodecPreferences(codecs));
|
|
|
|
}, `setCodecPreferences() with modified codecs returned from getCapabilities() should throw InvalidAccessError`);
|
|
|
|
</script>
|