v4l2-loopback 只能运行一次,无法停止并重新启动

v4l2-loopback 只能运行一次,无法停止并重新启动

我正在使用 v4l2-loopback 创建一个可以被 Chrome 识别的虚拟网络摄像头。第一次启动环回后,一切正常,但当我第一次终止环回时,它不再工作。如果我使用 ctrl-c 或通过向 ffmpeg 发送“q”来终止它,就会出现这种情况。如果我第二次使用 sudo 运行 ffmpeg,它确实可以工作,然后在 sudo 或以普通用户身份运行后就无法工作了。所以它似乎每个用户都工作一次,这让我认为每个用户都创建了一些文件,但没有正确清理。

如何有效地关闭和打开环回?

这是环回脚本:

#!/bin/bash

facecam_serial_id="/dev/v4l/by-id/usb-Elgato_Elgato_Facecam_FW42K1A07613-video-index0"

ffmpeg -v debug -f v4l2 -input_format uyvy422 -framerate 60 -video_size 1920x1080 -i $facecam_serial_id -pix_fmt yuyv422 -f v4l2 /dev/video9

这是 ffmpeg 工作时的输出: https://termbin.com/h9xb

这是 ffmpeg 不起作用时的输出: https://termbin.com/5573

第一次杀死环回后,这是journalctl中的错误:

spa.v4l2: '/dev/video0' VIDIOC_QUERYCTRL: 管道损坏 我使用此命令来测试相机当前是否正在工作:

ffplay -f v4l2 /dev/video9

这是测试命令不再工作时出现的错误:

[video4linux2,v4l2 @ 0x7ff1d4000c80] Not a video capture device.
/dev/video9: No such device

所有想法表示赞赏!

答案1

我最近使用遇到了同样的问题OBS工作室

不是修复,而是对我有用的解决方法:

# Loopback not working or working once?
#  Try removing and reloading:
#
sudo modprobe -r v4l2loopback
sudo modprobe v4l2loopback
sudo depmod -a

祝你好运!

答案2

我在这里发现了这个问题: https://thesquareplanet.com/blog/camera-webcam-on-linux/

我发现 Elgato 对于开始和停止捕捉非常挑剔。而且它很快就会变旧,每次你想要录音时都必须将其拔出并重新插入。事实证明,通过使用该程序进行“软”重置,您可以非常轻松地解决这个问题。说明在这里: https://askubuntu.com/questions/645/how-do-you-reset-a-usb-device-from-the-command-line

我自己的一点贡献:

#!/bin/bash
Sample lsusb output for Elgato Facecam
Bus 004 Device 003: ID 0fd9:0078 Elgato Systems GmbH Elgato Facecam
facecam_vendor_id="0fd9:0078"

facecam_usb_path=$(lsusb -d $facecam_vendor_id | awk '{print "/dev/bus/usb/"$2"/"$4}' | awk '{print substr($0, 0, length($0)-1)}')

<path_to_binary>/usb_reset $facecam_usb_path

答案3

我对此也有一些运气:

sudo modprobe -r v4l2loopback
sudo modprobe v4l2loopback
sudo depmod -a

这是为了让 OBS 与 Microsoft Teams 配合使用 - 解决方法,因为 Linux 上的 Teams 不支持屏幕共享。

答案4

不确定这是否仍然相关,但我能够通过将 Elgato Facecam 更改为同步模式来避免断开/重新连接 USB 的需要(在 Windows 中,在 Linux 中使用时似乎仍然如此):

https://help.elgato.com/hc/en-us/articles/4681224843917-Elgato-Facecam-如何更改USB传输模式

请注意,最近的 4.09 固件更新也可能消除了环回的需要:

https://gist.github.com/catrielmuller/71ae055871893d289476ee570fd953d8

相关内容