我想捕获我的 Linux 桌面(ubuntu 20.04)(的一部分),并将其作为网络摄像头传输到在 Virtualbox 中运行的 Windows 10 客户 VM。
我发现在 Linux 上使用桌面作为虚假网络摄像头这让我受益匪浅。
所以我安装了 v4l2loopback ( apt install v4l2loopback-dkms
),然后运行modprobe v4l2loopback
。
然后我运行了 ffmpeg 命令:ffmpeg -f x11grab -framerate 25 -video_size 1280x720 -i :1.0+0,0 -f v4l2 /dev/video0
这是可行的,因为我可以在 VLC 中打开 /dev/video0(媒体 > 打开捕获设备 > 打开 /dev/video0)并查看流。
它还可以在 Virtualbox 上看到 /dev/video0 设备。方法是导航至“设备 > 网络摄像头”。我必须安装 Virtual Box 扩展包 ( sudo apt install virtualbox-ext-pack
)。
虚拟框将网络摄像头设备命名为“虚拟视频设备 (0x0000)”,与输出v4l2-ctl --all -d /dev/video0 | grep "Card type"
“卡类型:虚拟视频设备 (0x0000)”匹配。它列出的其他设备也同样与 /dev/video<0-6> 正确对应。
因此我相信 VirtualBox 正在接收正确的视频源。
唯一的问题是 Windows 只会获得蓝屏(当然!)作为网络摄像头信号。我看不到在 VLC 中获得的正确视频信号。
我确实找到了这个页面:https://forums.virtualbox.org/viewtopic.php?f=7&t=96552,但无法得出确切的答案。我对 ffmpeg 或 gstreamer 了解不多!
我可能会在 ubuntu 客户操作系统上尝试同样的事情,以将其缩小到 Windows 问题或视频格式问题。
在此先感谢您的任何建议!
答案1
好的,所以答案是以 yuyv422 格式输出
就我而言
ffmpeg -loglevel verbose -f x11grab -framerate 25 -video_size 1280x720 -i :1.0+0,0 -f v4l2 -vf format=yuyv422 /dev/video6
您可能需要弄清楚哪个 /dev/video# 是正确的。