如何在 Linux 上将我的桌面/屏幕作为(假)“网络摄像头”流式传输到 /dev/video1?

如何在 Linux 上将我的桌面/屏幕作为(假)“网络摄像头”流式传输到 /dev/video1?

我有两个命令,一个可以让我将屏幕录制为 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

解决了。

解决步骤:

  1. 卸载之前的 v4l2loopbacksudo modprobe -r v4l2loopback
  2. git clone https://github.com/umlaeute/v4l2loopback/
  3. make && sudo make install(如果您使用安全启动,则需要先对其进行签名https://ubuntu.com/blog/how-to-sign-things-for-secure-boot
  4. sudo depmod -a
  5. 加载 videodev 驱动程序sudo modprobe videodev
  6. sudo insmod ./v4l2loopback.ko devices=1 video_nr=2 exclusive_caps=1改变视频编号根据您已有的摄像头数量。零索引
  7. ls -al /dev/video*将 /dev/video[video_nr] 与 ffmpeg 一起使用
  8. 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
  9. https://webcamtests.com并测试你的假摄像头 虚拟凸轮
  10. 利润! 在职的

如果你希望这种情况在两次靴子之间持续存在,https://askubuntu.com/a/1024786/721238应该这样做。

相关内容