Chrome/Selenium:use-file-for-fake-video-capture 参数失效问题求助
我之前做WebRTC相关自动化测试时也踩过类似的坑,结合你的描述,来拆解下可能的原因和可行的解决方向:
可能的原因分析
Chrome媒体模拟策略的版本变更
Chrome 90开始对媒体设备的模拟机制做了较大调整,use-fake-device-for-media-stream和use-file-for-fake-video-capture这两个启动参数的生效逻辑被修改了。新版Chrome会更严格地校验模拟设备的初始化流程,导致视频文件无法被正确解码加载,页面就会一直卡在等待媒体流的状态。视频文件的兼容性问题
旧版本Chrome能兼容的视频格式/编码,在90+版本里可能不再支持。比如视频编码不是H.264、分辨率或帧率不符合Chrome媒体流的标准,都会导致模拟视频无法被识别,进而引发加载停滞。启动参数的组合冲突
你同时设置的三个参数可能存在冲突:新版Chrome中,use-file-for-fake-video-capture本身会自动创建一个虚拟设备,再加上use-fake-device-for-media-stream可能会导致设备初始化逻辑混乱,最终无法正常加载视频。
可行的解决思路
调整启动参数组合
尝试简化参数配置:- 去掉
use-fake-device-for-media-stream,只保留use-fake-ui-for-media-stream和use-file-for-fake-video-capture=${fakeVideoFilePath},看看是否能正常加载。 - 额外添加
--allow-file-access-from-files参数,确保Chrome有读取本地视频文件的权限,避免路径权限问题。
- 去掉
重新生成符合标准的模拟视频
用FFmpeg把视频转成Chrome媒体流兼容的格式:
推荐转成H.264编码、640x480分辨率、30fps的MP4文件,命令示例:ffmpeg -i your_old_video.mp4 -c:v libx264 -crf 23 -s 640x480 -r 30 compatible_fake_video.mp4另外要确保视频路径是绝对路径,且没有空格、特殊字符,新版Chrome对路径的解析更严格。
改用Chrome DevTools Protocol (CDP) 注入视频流
这是目前适配新版Chrome最可靠的方式,直接通过调试协议控制媒体设备,绕过启动参数的限制:
以Python Selenium为例,代码如下:driver.execute_cdp_cmd('Media.setVideoCaptureDeviceOverride', { 'deviceId': 'fake_camera', 'videoPath': '/absolute/path/to/your/video.mp4' })执行这个命令后,页面请求摄像头时就会自动加载指定的视频文件。
临时降级Chrome版本(应急方案)
如果项目紧急,可以先降级到Chrome 90以下版本维持测试,但这只是临时办法,还是建议尽快适配新版本。
另外,摄像头名称显示为视频路径,说明Chrome已经识别到了伪造设备,但视频流无法播放,优先排查视频文件本身的兼容性和路径权限问题,换一个能在Chrome中直接播放的视频试试,大概率能定位问题。
内容的提问来源于stack exchange,提问作者Morious

