blob: b94def614723d52e7bec4ededbcb19ce97b00306 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>RTCPeerConnection RTP payload types</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
</head>
<body>
<script>
// Test that when creating an offer we do not run out of valid payload types.
// This uses the deprecated RTP datachannels which means an extra payload
// type is allocated.
const legacy_datachannel_constraint = {
optional: [{ RtpDataChannels: true }]
}
promise_test(async t => {
const pc1 = new RTCPeerConnection(null, legacy_datachannel_constraint);
t.add_cleanup(() => pc1.close());
const offer = await pc1.createOffer({offerToReceiveAudio: true, offerToReceiveVideo: true});
// Extract all payload types from the m= lines.
const payloadTypes = offer.sdp.split('\n')
.map(line => line.trim())
.filter(line => line.startsWith('m='))
.map(line => line.split(' ').slice(3).join(' '))
.join(' ')
.split(' ')
.map(payloadType => parseInt(payloadType, 10));
// The list of allowed payload types is taken from here
// https://www.iana.org/assignments/rtp-parameters/rtp-parameters.xhtml#rtp-parameters-1.
const forbiddenPayloadTypes = payloadTypes
.filter(payloadType => {
if (payloadType >= 96 && payloadType <= 127) {
return false;
}
if (payloadType >= 72 && payloadType < 96) {
return true;
}
if (payloadType >= 35 && payloadType < 72) {
return false;
}
// TODO: Check against static payload type list.
return false;
});
assert_equals(forbiddenPayloadTypes.length, 0)
}, 'createOffer with the maximum set of codecs and RTP datachannels does not generate invalid payload types');
</script>
</body>
</html>