mirror of
https://github.com/servo/servo.git
synced 2025-10-04 02:29:12 +01:00
110 lines
4.5 KiB
HTML
110 lines
4.5 KiB
HTML
<!doctype html>
|
|
<title>MediaStreamTrack GetSettings</title>
|
|
<p class="instructions">When prompted, accept to share your video stream.</p>
|
|
<script src=/resources/testharness.js></script>
|
|
<script src=/resources/testharnessreport.js></script>
|
|
<script>
|
|
'use strict'
|
|
|
|
// https://w3c.github.io/mediacapture-main/archives/20170605/getusermedia.html
|
|
|
|
promise_test(t => {
|
|
const constraints = {
|
|
video: true,
|
|
audio: false
|
|
};
|
|
|
|
return navigator.mediaDevices.getUserMedia(constraints)
|
|
.then(mediaStream => {
|
|
const settings1 = mediaStream.getVideoTracks()[0].getSettings();
|
|
const videoConstraints = {
|
|
deviceId: settings1.deviceId
|
|
};
|
|
|
|
return navigator.mediaDevices.getUserMedia({
|
|
video: videoConstraints,
|
|
audio: false
|
|
}).then(mediaStream => {
|
|
const settings2 = mediaStream.getVideoTracks()[0].getSettings();
|
|
assert_equals(settings1.deviceId, settings2.deviceId);
|
|
});
|
|
});
|
|
}, 'A device can be opened twice and have the same device ID');
|
|
|
|
promise_test(t => {
|
|
const constraints = {
|
|
video: true,
|
|
audio: false
|
|
};
|
|
|
|
return navigator.mediaDevices.getUserMedia(constraints)
|
|
.then(mediaStream => {
|
|
const settings1 = mediaStream.getVideoTracks()[0].getSettings();
|
|
const videoConstraints = {
|
|
deviceId: settings1.deviceId,
|
|
width: {
|
|
exact: settings1.width / 2
|
|
}
|
|
};
|
|
|
|
return navigator.mediaDevices.getUserMedia({
|
|
video: videoConstraints,
|
|
audio: false
|
|
}).then(mediaStream => {
|
|
const settings2 = mediaStream.getVideoTracks()[0].getSettings();
|
|
assert_equals(settings1.deviceId, settings2.deviceId);
|
|
assert_equals(settings1.width / 2, settings2.width);
|
|
});
|
|
});
|
|
}, 'A device can be opened twice with different resolutions');
|
|
|
|
promise_test(t => {
|
|
return navigator.mediaDevices.enumerateDevices().then(async devices => {
|
|
for (var device of devices) {
|
|
if (device.kind == "audiooutput")
|
|
continue;
|
|
var device_id_constraint = {deviceId: {exact: device.deviceId}};
|
|
var constraints = device.kind == "audioinput"
|
|
? {audio: device_id_constraint}
|
|
: {video: device_id_constraint};
|
|
|
|
var stream = await navigator.mediaDevices.getUserMedia(constraints);
|
|
assert_equals(stream.getTracks()[0].getSettings().groupId,
|
|
device.groupId);
|
|
assert_true(device.groupId.length > 0);
|
|
}
|
|
});
|
|
}, 'groupId is correctly reported by getSettings() for all devices');
|
|
|
|
promise_test(t => {
|
|
return navigator.mediaDevices.getUserMedia({audio: true}).then(stream => {
|
|
let settings = stream.getAudioTracks()[0].getSettings();
|
|
assert_equals(typeof(settings.deviceId), "string",
|
|
"deviceId should exist and it should be a string.");
|
|
assert_equals(typeof(settings.groupId), "string",
|
|
"groupId should exist and it should be a string.");
|
|
assert_equals(typeof(settings.volume), "number",
|
|
"volume should exist and it should be a number.");
|
|
assert_true(settings.volume >= 0.0 && settings.volume <= 1.0,
|
|
"volume should be a number in the range [0.0, 1.0].");
|
|
assert_equals(typeof(settings.sampleRate), "number",
|
|
"sampleRate should exist and it should be a number.");
|
|
assert_true(settings.sampleRate > 0, "sampleRate should be positive.");
|
|
assert_equals(typeof(settings.sampleSize), "number",
|
|
"sampleSize should exist and it should be a number.");
|
|
assert_true(settings.sampleSize > 0, "sampleSize should be positive.");
|
|
assert_equals(typeof(settings.echoCancellation), "boolean",
|
|
"echoCancellation should exist and it should be a boolean.");
|
|
assert_equals(typeof(settings.autoGainControl), "boolean",
|
|
"autoGainControl should exist and it should be a boolean.");
|
|
assert_equals(typeof(settings.noiseSuppression), "boolean",
|
|
"noiseSuppression should exist and it should be a boolean.");
|
|
assert_equals(typeof(settings.latency), "number",
|
|
"latency should exist and it should be a number.");
|
|
assert_true(settings.latency >= 0, "latency should not be negative.");
|
|
assert_equals(typeof(settings.channelCount), "number",
|
|
"channelCount should exist and it should be a number.");
|
|
assert_true(settings.channelCount > 0, "channelCount should be positive.");
|
|
});
|
|
}, 'audio properties are reported by getSettings()');
|
|
</script>
|