You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一Linux机器不同浏览器测试WebRTC视频通话时NotReadableError问题咨询

同一Linux机器不同浏览器测试WebRTC视频通话时NotReadableError问题咨询

嗨,我之前在Linux环境下做WebRTC测试时也碰到过几乎一模一样的问题,结合你描述的场景——同一台机器上用Chrome和Chromium两个独立浏览器测试,排除权限问题后,这个NotReadableError基本可以确定是Linux系统的视频设备独占机制导致的:物理摄像头在Linux里默认是单进程独占的,当其中一个浏览器已经成功获取并占用摄像头设备后,另一个浏览器进程就无法再启动这个视频源了。

给你几个实用的解决办法:

  • 用虚拟摄像头实现多进程共享物理设备
    这是最靠谱的长期测试方案,借助Linux的v4l2loopback工具创建虚拟摄像头,把物理摄像头的画面同步推送到多个虚拟设备,让每个浏览器各自占用一个虚拟设备即可:

    1. 先安装工具包(以Debian/Ubuntu为例,其他发行版用对应包管理器):
      sudo apt install v4l2loopback-dkms v4l2loopback-utils
      
    2. 加载内核模块并创建两个虚拟摄像头设备:
      sudo modprobe v4l2loopback devices=2
      
    3. 用ffmpeg把物理摄像头的画面推送到两个虚拟设备:
      ffmpeg -f v4l2 -i /dev/video0 -f v4l2 /dev/video1 -f v4l2 /dev/video2
      
      (注意:这里假设你的物理摄像头是/dev/video0,可以用v4l2-ctl --list-devices命令查看设备路径)
      完成后分别在Chrome和Chromium的媒体设备选择里,各自选一个虚拟摄像头就能同时使用了。
  • 临时禁用摄像头,先验证通话逻辑
    如果只是想先排查WebRTC的连接、音频等逻辑是否正常,不想折腾虚拟摄像头,可以临时修改获取媒体流的代码,把视频采集关掉:

    // 临时修改媒体约束,仅启用音频
    navigator.mediaDevices.getUserMedia({ audio: true, video: false })
      .then(stream => {
        // 后续流处理逻辑
      })
    

    这样两个浏览器都不会占用摄像头,先确认通话链路没问题后,再回头处理视频的共享问题。

  • 尝试浏览器的隔离模式(临时排查用)
    可以试试打开其中一个浏览器的隐私/隐身窗口,比如Chrome隐身窗口+Chromium正常窗口,这类模式会使用独立的进程空间,有可能绕开进程间的设备占用冲突。不过这个方法稳定性不高,只适合快速排查问题,不适合长期测试。

  • 重启媒体服务,清理残留占用
    有时候Linux的PipeWire或PulseAudio服务可能会残留设备占用的进程,重启相关服务试试:

    systemctl --user restart pipewire pipewire-pulse
    

    重启后再重新测试,有可能解决偶然的进程残留导致的设备占用问题。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 13:34:50