electron navigator.mediaDevices.enumerateDevices()显示音频输入,但不显示来自捕获卡的视频输入

ix0qys7i  于 2023-10-14  发布在  Electron
关注(0)|答案(1)|浏览(197)

我最近安装了一个M.2 PCIe捕获卡(Magewell Eco Capture Dual HDMI M2),希望能够在 chrome 渲染器(Electron专用)中访问捕获。
我可以通过v4l2-ctl看到@ /dev/videoX的输入,也可以通过ffplay播放输入,但在枚举媒体设备时,我无法让它们显示在chrome中。枚举确实显示了两个关联的音频输入类型,但没有显示视频输入。
在同一个渲染器中,我能够枚举来自同一制造商制造的USB捕获卡的视频输入。
我所能找到的与这个主题相关的一切都只是人们在浏览器中整理权限问题,这里的情况并非如此,因为我在Electron本地运行,并且能够采购其他输入设备。
我的用户可以访问操作系统中的视频,这可以通过能够ffplay它们来证明。
我整个下午都在为这个问题绞尽脑汁,任何帮助都将不胜感激。
Ubuntu 22.04

oxosxuxt

oxosxuxt1#

你的情况很有趣。如果采集卡通过v4l2-ctl可见并可通过ffplay播放,但未被Chromium枚举,则表明可能存在兼容性问题或Chromium与视频源交互方式的差异。
以下是一些你可以尝试的步骤和建议:
1.酒店:尽管您提到权限不是问题,但让我们仔细检查一下。确保您的用户属于video组:

sudo usermod -aG video $USER

然后,注销并重新登录,以使组更改生效。

*使用v4 l2 v4 l2v4l2loopback可以创建虚拟视频设备。这对于测试可能是有用的。您可以使用ffmpeggstreamer将M.2 PCIe采集卡的输出馈送到由v4l2loopback创建的虚拟设备。通过这种方式,您实际上创建了一个“代理”设备,如果Chromium/Electron可以检测到这个虚拟设备,那么捕获卡可能会有一些特定的东西阻止直接检测。

  • 安装v4l2loopback
sudo apt install v4l2loopback-dkms
  • 加载模块:
sudo modprobe v4l2loopback
  • 将捕获卡输出馈送到虚拟设备:
ffmpeg -i /dev/videoX -f v4l2 /dev/videoY

videoX替换为捕获卡的设备索引,将videoY替换为虚拟设备的索引。

  • 检查虚拟设备是否出现在Chromium中。
    *使用较旧/较新的Electron版本:有时,某些版本的Electron可能有bug或问题。尝试使用旧版本或新版本的Electron,看看行为是否发生了变化。
    *检查udev规则:有时udev规则可能会影响设备的识别方式。确保Magewell卡没有冲突的udev规则。
    *浏览器策略:Chromium具有可以控制对视频设备的访问的策略。确保没有可能阻止捕获卡的策略。在Chromium中检查chrome://policy
    *WebRTC内部:尝试枚举设备后,导航到Chromium中的chrome://webrtc-internals。此页面可以提供有关WebRTC操作的详细日志,这可能会提供线索。
    *更新驱动和系统:确保所有系统驱动程序(尤其是与视频相关的驱动程序)都是最新的。可能有一个兼容性补丁,你错过了。
    *反馈与厂商支持:既然你提到你可以看到来自同一制造商生产的USB捕获卡的视频输入,那么这种特定型号的卡可能有一些怪癖。联系Magewell的支持或检查他们的论坛,如果有任何类似的问题已经报告。制造商可能会提供解决此兼容性问题的固件更新或驱动程序。

如果所有这些都失败了,请考虑将问题报告给Electron和Chromium团队。这可能是他们不知道的特定错误或兼容性问题。

相关问题