四个 /dev/video 条目但只有一个摄像头

Inv*_*ost 11 webcam skype camera xps dell

我有一台戴尔 XPS 9370,众所周知它只有一个摄像头。但ls /dev/video*结果是/dev/video0 /dev/video1 /dev/video2 /dev/video3,所以有四种不同的相机设备。
这四个摄像头冒泡到应用程序中,例如 Skype 列出了四个摄像头,但只有第一个 ( /dev/video0) 起作用。

有谁知道其他条目来自哪里?或者如何从更高层隐藏它们?

Jam*_* EJ 8

每个相机都添加了第二个元数据设备,用于输出时间戳信息详细的每帧元数据

您可以使用v4l2-ctl获取有关设备的更多信息,并可以使用v4l2-ctl --list-formats --device /dev/videoX它来确定它是否包含视频流。

要仅列出具有视频数据的设备,请使用:

for dev in `find /dev -iname 'video*' -printf "%f\n"`
do
  v4l2-ctl --list-formats --device /dev/$dev | \
    grep -qE '\[[0-9]\]' && \
    echo $dev `cat /sys/class/video4linux/$dev/name`
done
Run Code Online (Sandbox Code Playgroud)

fzf这可以与选择相机和启动程序相结合:

for dev in `find /dev -iname 'video*' -printf "%f\n"`;do; v4l2-ctl --list-formats --device /dev/$dev | grep -qE '\[[0-9]\]' && echo $dev `cat /sys/class/video4linux/$dev/name`;done | fzf | awk '{ printf("/dev/%s", $1) }' | xargs guvcview --device
Run Code Online (Sandbox Code Playgroud)


小智 7

这里给出的答案https://unix.stackexchange.com/questions/512759/multiple-dev-video-for-one-physical-device 是一个很好的答案。我在 Skype 上遇到了同样的问题,当我将内核从 4.4.x 升级到 5.1.x 时它就开始了,所以在那里的某个地方,uvcvideo 模块产生了不同的输出。然而,有没有指出输出

v4l2-ctl --device=/dev/video* --all
Run Code Online (Sandbox Code Playgroud)

确实表明每个条目都有不同的功能,在我的罗技 USB 相机的情况下,只有 1 个具有视频捕获功能。所以这很可能是 Skype 中的一个错误,它出现在内核可能自己修复了一个错误之后,它不仅显示了具有“视频捕获”功能的条目。