【发布时间】:2020-04-21 19:20:42
【问题描述】:
背景故事:我使用的一个直播网站不够智能,无法检测我的网络摄像头(Logitech Brio,4k)的功能,而是使用默认的每秒帧数设置,即 5fps。
(答案中的完整解决方案演练)
我能想到的最佳解决方案(除了更改直播提供商)是使用 v4l2loopback 创建一个环回虚拟网络摄像头,我可以强制具有我想在该直播网站上使用的确切设置。
对于 brio,mjpeg 的帧速率更高,而不是默认的 yuyv。
问题 1:
我可以轻松阅读 mjpeg,但不幸的是,我的头一直在撞墙,因为 v4l2loopback 显然只想要 yuyv。
我尝试过这样的事情:
ffmpeg -f v4l2 \
-input_format mjpeg \
-framerate 30 \
-video_size 1280x720 \
-i /dev/video0 \
-vcodec copy \
-f v4l2 /dev/video6
和
ffmpeg -f v4l2 \
-input_format mjpeg \
-framerate 30 \
-video_size 1280x720 \
-i /dev/video0 \
-vcodec yuyv422 \ # this line changed (even tried "copy")
-f v4l2 /dev/video6
但他们不会工作。我收到如下错误:
与 yuvj422p 等效的未知 V4L2 像素格式
和
...使用了已弃用的像素格式,请确保您正确设置了范围...
...V4L2 输出设备仅支持单个原始视频流...
最终我得到了这个工作:
ffmpeg -f v4l2 \
-input_format mjpeg \
-framerate 30 \
-video_size 1280x720 \
-i /dev/video0 \
-pix_fmt yuyv422 \ # The winning entry
-f v4l2 /dev/video6
问题 2
下一个问题是让 chrome 查看虚拟网络摄像头。它可以在 guvcview 上正常工作,在 Firefox 上我可以使用网络摄像头测试站点,它会毫无问题地拾取虚拟摄像头。
事实证明,谷歌具有过度保护的性质(顺便说一句,它正在窃取我们所有的数据),不想使用可以读写的网络摄像头。
因此,在启动 v4l2loopback 时,您必须告诉它向 chrome 等消费者宣布它是“只读”的。
这是我使用的确切的 modprobe:
sudo modprobe v4l2loopback devices=1 exclusive_caps=1
【问题讨论】:
标签: linux ffmpeg live-streaming v4l2 v4l2loopback