webrtc wpt: add test for payload type demuxing
and rename the file
BUG=webrtc:12029
Change-Id: I52753f98686715a19f910d7d0ff883e55a840722
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2500842
Commit-Queue: Philipp Hancke <philipp.hancke@googlemail.com>
Reviewed-by: Harald Alvestrand <hta@chromium.org>
Cr-Commit-Position: refs/heads/master@{#823921}
diff --git a/webrtc/protocol/rtp-demuxing.html b/webrtc/protocol/rtp-demuxing.html
new file mode 100644
index 0000000..1b8dce3
--- /dev/null
+++ b/webrtc/protocol/rtp-demuxing.html
@@ -0,0 +1,108 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>RTCPeerConnection payload type demuxing</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 => {
+ const caller = new RTCPeerConnection();
+ t.add_cleanup(() => caller.close());
+ const callee = new RTCPeerConnection();
+ t.add_cleanup(() => callee.close());
+ exchangeIceCandidates(caller, callee);
+
+ const stream = await getNoiseStream({video: true});
+ t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
+ stream.getTracks().forEach(track => caller.addTrack(track, stream));
+ stream.getTracks().forEach(track => caller.addTrack(track.clone(), stream.clone()));
+
+ let callCount = 0;
+ let metadataToBeLoaded = new Promise(resolve => {
+ callee.ontrack = (e) => {
+ const stream = e.streams[0];
+ const v = document.createElement('video');
+ v.autoplay = true;
+ v.srcObject = stream;
+ v.id = stream.id
+ v.addEventListener('loadedmetadata', () => {
+ if (++callCount === 2) {
+ resolve();
+ }
+ });
+ };
+ });
+
+ // Restrict first transceiver to VP8, second to H264.
+ const {codecs} = RTCRtpSender.getCapabilities('video');
+ const vp8 = codecs.find(c => c.mimeType === 'video/VP8');
+ const h264 = codecs.find(c => c.mimeType === 'video/H264');
+ caller.getTransceivers()[0].setCodecPreferences([vp8]);
+ caller.getTransceivers()[1].setCodecPreferences([h264]);
+
+ const offer = await caller.createOffer();
+ // Replace the mid header extension and all ssrc lines
+ // with bogus. The receiver will be forced to do payload type demuxing.
+ const sdp = offer.sdp
+ .replace(/rtp-hdrext:sdes/g, 'rtp-hdrext:something')
+ .replace(/a=ssrc:/g, 'a=notssrc');
+
+ await callee.setRemoteDescription({type: 'offer', sdp});
+ await caller.setLocalDescription(offer);
+
+ const answer = await callee.createAnswer();
+ await caller.setRemoteDescription(answer);
+ await callee.setLocalDescription(answer);
+
+ await metadataToBeLoaded;
+}, 'Can demux two video tracks with different payload types on a bundled connection');
+
+promise_test(async t => {
+ const caller = new RTCPeerConnection({bundlePolicy: 'max-compat'});
+ t.add_cleanup(() => caller.close());
+ const callee = new RTCPeerConnection();
+ t.add_cleanup(() => callee.close());
+ exchangeIceCandidates(caller, callee);
+
+ const stream = await getNoiseStream({video: true});
+ t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
+ stream.getTracks().forEach(track => caller.addTrack(track, stream));
+ stream.getTracks().forEach(track => caller.addTrack(track.clone(), stream.clone()));
+
+ let callCount = 0;
+ let metadataToBeLoaded = new Promise(resolve => {
+ callee.ontrack = (e) => {
+ const stream = e.streams[0];
+ const v = document.createElement('video');
+ v.autoplay = true;
+ v.srcObject = stream;
+ v.id = stream.id
+ v.addEventListener('loadedmetadata', () => {
+ if (++callCount === 2) {
+ resolve();
+ }
+ });
+ };
+ });
+
+ const offer = await caller.createOffer();
+ // Replace BUNDLE, the mid header extension and all ssrc lines
+ // with bogus. The receiver will be forced to do payload type demuxing
+ // which is still possible because the different m-lines arrive on
+ // different ports/sockets.
+ const sdp = offer.sdp.replace('BUNDLE', 'SOMETHING')
+ .replace(/rtp-hdrext:sdes/g, 'rtp-hdrext:something')
+ .replace(/a=ssrc:/g, 'a=notssrc');
+
+ await callee.setRemoteDescription({type: 'offer', sdp});
+ await caller.setLocalDescription(offer);
+
+ const answer = await callee.createAnswer();
+ await caller.setRemoteDescription(answer);
+ await callee.setLocalDescription(answer);
+
+ await metadataToBeLoaded;
+}, 'Can demux two video tracks with the same payload type on an unbundled connection');
+
+</script>
diff --git a/webrtc/protocol/unbundled-pt-demuxing.https.html b/webrtc/protocol/unbundled-pt-demuxing.https.html
deleted file mode 100644
index e9f07e4..0000000
--- a/webrtc/protocol/unbundled-pt-demuxing.https.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!doctype html>
-<meta charset=utf-8>
-<title>RTCPeerConnection payload type demuxing for unbundled connections</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 => {
- const caller = new RTCPeerConnection({bundlePolicy: 'max-compat'});
- t.add_cleanup(() => caller.close());
- const callee = new RTCPeerConnection();
- t.add_cleanup(() => callee.close());
-
- const stream = await getNoiseStream({video: true});
- t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
- stream.getTracks().forEach(track => caller.addTrack(track, stream));
- stream.getTracks().forEach(track => caller.addTrack(track.clone(), stream.clone()));
-
- let callCount = 0;
- let metadataToBeLoaded = new Promise(resolve => {
- callee.ontrack = (e) => {
- const stream = e.streams[0];
- const v = document.createElement('video');
- v.autoplay = true;
- v.srcObject = stream;
- v.id = stream.id
- v.addEventListener('loadedmetadata', () => {
- if (++callCount === 2) {
- resolve();
- }
- });
- };
- });
-
- exchangeIceCandidates(caller, callee);
-
- const offer = await caller.createOffer();
- // Replace BUNDLE, the mid header extension and all ssrc lines
- // with bogus. The receiver will be forced to do payload type demuxing
- // which is still possible because the different m-lines arrive on
- // different ports/sockets.
- const sdp = offer.sdp.replace('BUNDLE', 'SOMETHING')
- .replace(/rtp-hdrext:sdes/g, 'rtp-hdrext:something')
- .replace(/a=ssrc:/g, 'a=notssrc');
-
- await callee.setRemoteDescription({type: 'offer', sdp});
- await caller.setLocalDescription(offer);
-
- const answer = await callee.createAnswer();
- await caller.setRemoteDescription(answer);
- await callee.setLocalDescription(answer);
-
- await metadataToBeLoaded;
-}, 'Can demux two video tracks on an unbundled connection by payload type');
-</script>