借助 WebRTC,让用户在浏览器中选择音频和视频源本应很简单。然而,并非所有网页视频应用都实现了更改网络摄像头视频源的控件。
在部分浏览器中,这并不是问题。例如,Firefox 和 Edge 都允许用户针对每个站点分别选择视频源。然而,虽然 Google Chrome 允许用户通过特殊的 chrome://settings/content/camera 网址选择默认网络摄像头,但这个默认摄像头选择并不会被 WebRTC 采用。许多用户已在 Google Chrome 论坛中对此提出抱怨,但目前尚看不到解决方案。
因此,当用户使用的应用不支持视频源选择(例如 vMix),同时使用的浏览器又不支持按站点选择视频源(例如 Chrome)时,就会陷入困境。不允许用户选择摄像头的视频应用最终会随机做出选择,这意味着用户可能无法使用自己想要的摄像头。
好在,我们可以用一个简单的小技巧,强制让 Chrome 上的网页视频应用选择指定的摄像头。
以下是针对 vMix 的 vmixcall.com 服务的具体操作方法:
- 打开 Chrome,开始你的视频通话会话。
- 使用
⌥ Option+⌘ Cmd+i键盘快捷键,或通过More Tools→Developer Tools菜单,打开 Chrome 的“开发者工具”。 - 将以下代码粘贴到默认的“控制台”标签页中,然后按下回车键:
function gotDevices(deviceInfos) {
// Look for the Reincubate Camo video input device.
var deviceId;
for (deviceInfo of deviceInfos) {
if (deviceInfo.kind === 'videoinput' && deviceInfo.label === 'Reincubate Camo') {
deviceId = deviceInfo.deviceId
break;
}
}
if (deviceId) {
const constraints = {
audio: true,
video: { deviceId: { exact: deviceId } }
};
navigator.mediaDevices.getUserMedia(constraints).then(gotStream);
} else {
console.error('Unable to find Reincubate Camo video input device.');
}
}
function gotStream (stream) {
// Tell the vMix Call session to switch to a different stream.
try {
session.gotLocalStream(stream);
} catch {
console.error('Unable to trigger vMix Call session stream update.');
}
}
// Ask the browser for a list of media devices.
navigator.mediaDevices.enumerateDevices().then(gotDevices)
完成后,Chrome 应会自动切换到 Camo 视频源。如果这个变通方法对你不起作用,请在评论中告诉我们,或直接联系我们,以便我们为你提供帮助。
效果大致如下:
如果你希望今后不再需要这样的变通方法,欢迎向你的视频服务提供商反馈,建议他们在应用中加入视频源选择功能。
