Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!doctype html>
<html>
<head>
<title>MediaRecorder peer connection</title>
<link rel="help"
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="../../mediacapture-streams/permission-helper.js"></script>
<script src="../utils/peerconnection.js"></script>
</head>
<body>
<video id="remote" autoplay width="240"></video>
<script>
[{kind: "video", audio: false, codecPreference: "VP8", codecRegex: /.*vp8.*/},
{kind: "audio/video", audio: true, codecPreference: "VP8", codecRegex: /.*vp8.*/},
{kind: "video", audio: false, codecPreference: "VP9", codecRegex: /.*vp9.*/},
{kind: "audio/video", audio: true, codecPreference: "VP9", codecRegex: /.*vp9.*/}]
.forEach(args => {
promise_test(async t => {
const [localPc, remotePc, stream] = await startConnection(
t, args.audio, /*video=*/true, args.codecPreference);
// Needed for the tests to get exercised in Chrome (bug)
document.getElementById('remote').srcObject = stream;
const recorder = new MediaRecorder(stream); // Passthrough.
const onstartPromise = new Promise(resolve => {
recorder.onstart = t.step_func(() => {
assert_regexp_match(
recorder.mimeType, args.codecRegex,
"mimeType is matching " + args.codecPreference +
" in case of passthrough.");
resolve();
});
});
recorder.start();
await(onstartPromise);
}, "PeerConnection passthrough MediaRecorder receives " +
args.codecPreference + " after onstart with a " + args.kind +
" stream.");
});
promise_test(async t => {
const [localPc, remotePc, stream, transceivers] = await startConnection(
t, /*audio=*/false, /*video=*/true, /*videoCodecPreference=*/"VP8");
// Needed for the tests to get exercised in Chrome (bug)
document.getElementById('remote').srcObject = stream;
const recorder = new MediaRecorder(stream); // Possibly passthrough.
recorder.start();
await waitForReceivedFramesOrPackets(t, remotePc, false, true, 10);
// Switch codec to VP9; we expect onerror to not be invoked.
recorder.onerror = t.step_func(() => assert_unreached(
"MediaRecorder should be prepared to handle codec switches"));
setTransceiverCodecPreference(transceivers.video, "VP9");
await Promise.all([
exchangeOfferAnswer(localPc, remotePc),
waitForReceivedCodec(t, remotePc, "VP9")
]);
}, "PeerConnection passthrough MediaRecorder should be prepared to handle " +
"the codec switching from VP8 to VP9");
</script>
</body>
</html>