Chromium Browser中的内容设置

时间:2018-01-27 12:35:50

标签: google-chrome automation google-chrome-devtools

有没有办法从命令行获取/设置Chromium浏览器中麦克风/摄像头的USB硬件ID。

我无法找到答案。要求是在运行期间设置特定的摄像机/麦克风,而无需在铬浏览器中的chrome:// settings / content中手动更新。

如果我能获得一些链接或一些示例代码,那将是很棒的。谢谢!!!

1 个答案:

答案 0 :(得分:1)

您可以使用--use-fake-ui-for-media-stream CLI标志来禁止在拥有媒体流时显示权限对话框。它默认允许。

在选择带有CLI标志的特定麦克风或相机方面,我认为不可能。但是,您可以访问并选择要在JavaScript中使用的设备。

navigator.mediaDevices.enumerateDevices对象返回以下信息:

  1. 设备类型 - audioinput或videoinput
  2. 设备标签 - 例如内置麦克风,罗技,FaceTime高清摄像头等
  3. 设备ID - 例如bd9759740e6c29df7703d0bfg62vbbc726fcb9422fdb948a35550835a840b328
  4. 设备组ID - 如果2个以上的设备共享同一个物理设备,则可以拥有组ID
  5. 每个会话都会生成Id,所以我们不能硬编码,但标签不太可能改变。这意味着您可以遍历列表并获取与字符串匹配的设备ID。我使用async / await做了这个,但如果需要,你可以使用Promises或者转换为ES5:

    (async() => {
        const getFaceTimeCamId = async() => {
            try {
                const devices = await navigator.mediaDevices.enumerateDevices();
                const faceTimeCam = devices.find(device => 
                    device.kind === 'videoinput' && device.label === 'FaceTime HD Camera');
                return (faceTimeCam && faceTimeCam.deviceId) || undefined;
            } catch(err) {
                console.log(`${err.name}: ${err.message}`);
            }
        }
        console.log(await getFaceTimeCamId());
    })();
    

    然后,您可以为流设置约束对象,以包含所需的deviceId,例如,使用MediaDevices.getUserMedia时。

    const constraints = {
        video: { deviceId: { exact: faceTimeCamId } }
    };
    

    我没有对此进行全面测试,因为我手头没有其他相机或麦克风,但希望这有一些帮助。我不知道你的确切用例,所以可能做了一些假设。