我有两个命令,一个可以让我将屏幕录制为 AVI 视频文件,另一个可以让我将视频文件作为(假)“网络摄像头”进行流式传输。这对于不支持选择一个屏幕进行共享的应用程序非常有用(我正在看你 Slack)。
命令#1(https://askubuntu.com/a/892683/721238):
ffmpeg -y -f alsa -i hw:0 -f x11grab -framerate 30 -video_size 1920x1080 -i :0.0+1920,0 -c:v libx264 -pix_fmt yuv420p -qp 0 -preset ultrafast screenStream.avi
命令#2(https://unix.stackexchange.com/a/466683/253391):
ffmpeg -re -i screenStream.avi -map 0:v -f v4l2 /dev/video1
为什么我不能并行运行这两个?好吧,每当我使用“网络摄像头”时,第二个命令就会从文件的开头开始流式传输。所以我必须把时间安排得非常接近,否则就会有延迟。
我已经尝试了很多很多解决方案(包括使用 gstreamer 而不是 ffmpeg 的解决方案),但没有任何效果。这是我最后的希望。
如何在 Ubuntu 上将我的桌面/屏幕作为(假)“网络摄像头”流式传输到 /dev/video1?
答案1
解决了。
解决步骤:
- 卸载之前的 v4l2loopback
sudo modprobe -r v4l2loopback
git clone https://github.com/umlaeute/v4l2loopback/
make && sudo make install
(如果您使用安全启动,则需要先对其进行签名https://ubuntu.com/blog/how-to-sign-things-for-secure-boot)sudo depmod -a
- 加载 videodev 驱动程序
sudo modprobe videodev
sudo insmod ./v4l2loopback.ko devices=1 video_nr=2 exclusive_caps=1
改变视频编号根据您已有的摄像头数量。零索引ls -al /dev/video*
将 /dev/video[video_nr] 与 ffmpeg 一起使用sudo ffmpeg -f x11grab -r 60 -s 1920x1080 -i :0.0+1920,0 -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 -vf 'hflip,scale=640:360' /dev/video2
- 去https://webcamtests.com并测试你的假摄像头
- 利润!
如果你希望这种情况在两次靴子之间持续存在,https://askubuntu.com/a/1024786/721238应该这样做。