我想捕获(部分)我的 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 设备。这是通过导航到“设备 > 网络摄像头”。我必须安装虚拟盒扩展包 ( 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 问题或视频格式问题。
在此先感谢您的任何建议!
好的,所以答案是以 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# 是正确的。