You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过命令行获取/设置Chromium浏览器中麦/摄像头的USB硬件ID

指定Chromium默认麦克风/摄像头的命令行与代码方案

我刚好研究过这个需求,不用手动跳转chrome://settings/content调整的话,确实可以通过命令行参数或者Chrome DevTools Protocol (CDP) 来实现指定特定USB设备,下面分两种场景给你具体方案:

一、命令行启动时直接绑定设备

Chromium支持通过启动参数直接指定默认音视频设备,不过前提是你得先拿到目标设备的USB硬件ID(格式为vid:pid,比如046d:0825)。

获取USB设备ID的方法

不同系统的获取方式略有差异:

  • Windows:打开命令提示符,运行powershell Get-PnpDevice -Class AudioEndpoint, Camera | Select-Object FriendlyName, InstanceId,从InstanceId里提取vidpid(比如USB\VID_046D&PID_0825\...,整理为046D:0825即可)
  • macOS:在终端执行system_profiler SPAudioDataType SPCameraDataType,输出里找到USB Vendor IDUSB Product ID,组合成小写的vid:pid格式
  • Linux:用v4l2-ctl --list-devices查看摄像头、arecord -l查看麦克风,再结合lsusb的输出匹配对应的vid:pid

启动Chromium时指定设备

拿到ID后,用以下参数启动Chromium即可:

# 仅指定默认麦克风
chromium --use-fake-ui-for-media-stream --default-media-device="audio-input:<vid:pid>"

# 仅指定默认摄像头
chromium --use-fake-ui-for-media-stream --default-media-device="video-input:<vid:pid>"

# 同时指定麦克风和摄像头
chromium --use-fake-ui-for-media-stream --default-media-device="audio-input:<vid1:pid1>,video-input:<vid2:pid2>"

提示:--use-fake-ui-for-media-stream是用来跳过权限弹窗的,如果需要保留用户权限提示,可去掉这个参数,但设备指定依然生效。

二、运行时动态切换设备(CDP代码方案)

如果需要在Chromium运行过程中动态切换设备,可以借助Chrome DevTools Protocol的Media.setDeviceOverride方法,下面是一个Node.js示例(基于puppeteer库):

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    executablePath: 'path/to/your/chromium',
    args: ['--use-fake-ui-for-media-stream']
  });
  const page = await browser.newPage();
  
  // 获取当前所有媒体设备
  const cdpSession = await page.target().createCDPSession();
  const devices = await cdpSession.send('Media.getMediaDevices');
  
  // 根据设备名称筛选目标设备(也可以用deviceId直接匹配)
  const targetMicrophone = devices.devices.find(d => d.kind === 'audioinput' && d.label.includes('你的麦克风名称'));
  const targetCamera = devices.devices.find(d => d.kind === 'videoinput' && d.label.includes('你的摄像头名称'));
  
  // 覆盖默认设备
  if (targetMicrophone && targetCamera) {
    await cdpSession.send('Media.setDeviceOverride', {
      audioInputDeviceId: targetMicrophone.deviceId,
      videoInputDeviceId: targetCamera.deviceId
    });
  }
  
  // 测试:打开摄像头测试页面验证效果
  await page.goto('https://webcamtests.com/');
})();

这个方法的优势是无需重启浏览器,就能在运行时动态切换设备,还能直接通过设备名称筛选,不用手动去查USB ID。

注意事项

  • 确保你的Chromium版本在80以上(大部分现代版本都支持这些特性)
  • 如果是无头模式运行,不需要加--use-fake-device-for-media-stream(这个参数是模拟设备用的,指定真实设备时不需要)
  • Linux系统可能需要配置udev规则,确保Chromium有访问USB设备的权限

内容的提问来源于stack exchange,提问作者user73636

火山引擎 最新活动