gpt4 book ai didi

google-chrome - 将 X-Window 的内容馈送到虚拟相机

转载 作者:行者123 更新时间:2023-12-04 23:33:08 25 4
gpt4 key购买 nike

我想从应用程序窗口(在 Linux/Xorg 下)提供虚拟网络摄像头设备。到目前为止,我只是最大化了窗口,然后使用了 ffmpeg像这样捕获整个屏幕:

ffmpeg \
-f x11grab -framerate 15 -video_size 1280x1024 -i :0+0,0 \
-f v4l2 -vcodec rawvideo -pix_fmt yuv420p /dev/video6
在哪里 /dev/video6是我的 v4l2loopback 设备。这很有效,我可以在 chrome 的视频通话中使用虚拟摄像头。这也表明 v4l2loopback 模块已正确加载到内核中。
不幸的是,似乎 ffmpeg只能读取整个屏幕,不能读取应用程序窗口。 gstreamer另一方面可以。玩弄 gst-launch-1.0 ,我希望我能摆脱这样的事情:
gst-launch-1.0 ximagesrc xid=XID_OF_MY_WINDOW \
! "video/x-raw" \
! v4l2sink device=/dev/video6
然而,这提示 Device '/dev/video6' is not an output device.鉴于 ffmpeg似乎很高兴给 /dev/video6 写信我还尝试将 gst 输出通过管道传输到 ffmpeg,如下所示:
gst-launch-1.0 ximagesrc xid=XID_OF_MY_WINDOW \
! "video/x-raw" \
! filesink location=/dev/stdout \
| ffmpeg -i - -codec copy -f v4l2 -vcodec rawvideo -pix_fmt yuv420p /dev/video6
但随后 ffmpeg 提示 Invalid data found when processing input .
这是在 xvfb headless 环境中运行的,因此鼠标交互将不起作用。据我所知,这排除了obs。
我正在添加 chrome 标签,因为我看到 chrome 原则上也会通过 --use-fake-device-for-media-stream 提供虚拟相机转变。但是,这个开关似乎只支持静态文件而不是流。
虽然我不明白为什么,但另一个“应用程序窗口”窗口可能只是第二个浏览器窗口。因此,设置是在一个浏览器窗口中进行 google meet(或类似),并且虚拟摄像机从第二个浏览器窗口中获取。

最佳答案

您可以尝试在 v4l2sink 之前添加身份:

# Better restart kernel module
sudo rmmod v4l2loopback
sudo modprobe v4l2loopback <your_options>

# Got window id from xwininfo
gst-launch-1.0 ximagesrc xid=0x3000010 ! videoconvert ! video/x-raw,format=YUY2 ! identity drop-allocation=1 ! v4l2sink device=/dev/video6
您应该能够显示:
gst-launch-1.0 v4l2src device=/dev/video6 ! videoconvert ! xvimagesink
不知道您的情况,但是对于某些目标/操作系统/版本上的某些浏览器,您可能必须设置 exclusive_caps=1加载 v4l2loopback 内核模块时的选项。
另请注意,这可能不支持任何源窗口大小调整。

关于google-chrome - 将 X-Window 的内容馈送到虚拟相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72170314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com