Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!DOCTYPE HTML>
<html>
<head>
<script type="application/javascript" src="mediaStreamPlayback.js"></script>
</head>
<body>
<pre id="test">
<script type="application/javascript">
"use strict";
createHTML({
title: "Test the ability of opening multiple microphones via gUM",
bug: "1238038",
});
runTest(async () => {
// Ensure we use the real microphones by disabling loopback devices and fake devices.
await pushPrefs(["media.audio_loopback_dev", ""], ["media.navigator.streams.fake", false]);
try {
// Allow exposing microphone by calling gUM first
const defaultStream = await navigator.mediaDevices.getUserMedia({ audio: true });
for (const track of defaultStream.getTracks()) {
track.stop();
}
const devices = await navigator.mediaDevices.enumerateDevices();
// Create constraints
let constraints = [];
devices.forEach((device) => {
if (device.kind === "audioinput") {
constraints.push({
audio: { deviceId: { exact: device.deviceId } },
});
}
});
if (constraints.length >= 2) {
// Open microphones by the constraints
let mediaStreams = [];
for (const c of constraints) {
let stream = await navigator.mediaDevices.getUserMedia(c);
mediaStreams.push(stream);
}
// Close microphones
for (const stream of mediaStreams) {
for (const track of stream.getTracks()) {
track.stop();
}
}
mediaStreams = [];
} else {
dump("Skip test since we need at least two microphones\n");
}
} catch (e) {
ok(false, e.name + ": " + e.message);
}
});
</script>
</pre>
</body>
</html>