我应该将哪些约束传递给 getUserMedia() 以获得两个视频 mediaStreamTracks?
What constraints should I pass to getUserMedia() in order to get two video mediaStreamTracks?
我可以通过 navigator.mediaDevices.enumerateDevices()
承诺获得 'videoinput' 类型的媒体设备。
我可以通过 navigator.mediaDevices.getUserMedia(constraints)
promise 获取 mediaStream。
为了在 userMedia 中有两个视频轨道,constraints
应该是什么样子?
每次调用最多可以获得一个视频轨道和一个音频轨道getUserMedia()
,但可以多次调用。这可能会不止一次询问用户,具体取决于 https、浏览器和用户的操作。
跟随 Chrome 中的 the standard (which at this time requires using adapter.js),要获得特定的 "videoinput" 设备,请使用 deviceId
将其 deviceId
传递到 getUserMedia
限制条件:
navigator.mediaDevices.enumerateDevices()
.then(devices => {
var camera = devices.find(device => device.kind == "videoinput");
if (camera) {
var constraints = { deviceId: { exact: camera.deviceId } };
return navigator.mediaDevices.getUserMedia({ video: constraints });
}
})
.then(stream => video.srcObject = stream)
.catch(e => console.error(e));
exact
关键字使约束成为必需,保证它将 return 只有正确的约束,否则失败。
如果你想要两个摄像头,你将不得不用不同的 deviceId
再次调用 getUserMedia
,并希望你正在使用的 OS 支持它(例如手机通常不要)。
我可以通过 navigator.mediaDevices.enumerateDevices()
承诺获得 'videoinput' 类型的媒体设备。
我可以通过 navigator.mediaDevices.getUserMedia(constraints)
promise 获取 mediaStream。
为了在 userMedia 中有两个视频轨道,constraints
应该是什么样子?
每次调用最多可以获得一个视频轨道和一个音频轨道getUserMedia()
,但可以多次调用。这可能会不止一次询问用户,具体取决于 https、浏览器和用户的操作。
跟随 Chrome 中的 the standard (which at this time requires using adapter.js),要获得特定的 "videoinput" 设备,请使用 deviceId
将其 deviceId
传递到 getUserMedia
限制条件:
navigator.mediaDevices.enumerateDevices()
.then(devices => {
var camera = devices.find(device => device.kind == "videoinput");
if (camera) {
var constraints = { deviceId: { exact: camera.deviceId } };
return navigator.mediaDevices.getUserMedia({ video: constraints });
}
})
.then(stream => video.srcObject = stream)
.catch(e => console.error(e));
exact
关键字使约束成为必需,保证它将 return 只有正确的约束,否则失败。
如果你想要两个摄像头,你将不得不用不同的 deviceId
再次调用 getUserMedia
,并希望你正在使用的 OS 支持它(例如手机通常不要)。