将 Linux 桌面作为虚假网络摄像头传输到 virtuabox windows 客户机

将 Linux 桌面作为虚假网络摄像头传输到 virtuabox windows 客户机

我想捕获我的 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# 是正确的。

相关内容