如何通过命令行获取/设置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里提取vid和pid(比如USB\VID_046D&PID_0825\...,整理为046D:0825即可) - macOS:在终端执行
system_profiler SPAudioDataType SPCameraDataType,输出里找到USB Vendor ID和USB 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




