下沉到虚拟 v4l2 设备
Sink to the virtual v4l2 device
我在 Ubuntu 19.04
试过 example
gst-launch-1.0 videotestsrc ! v4l2sink device=/dev/video10
但是 gstreamer 失败了
Setting pipeline to PAUSED ...
ERROR: Pipeline doesn't want to pause.
ERROR: from element /GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0: Cannot identify device '/dev/video10'.
Additional debug info:
v4l2_calls.c(609): gst_v4l2_open (): /GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0:
system error: No such file or directory
Setting pipeline to NULL ...
Freeing pipeline ...
为什么不起作用?我没有在文档中找到这个,我需要以某种方式创建 /dev/video10 吗?
我对默认设备 /dev/video1 做了同样的操作,但它是我笔记本电脑上的输入摄像头设备:
sudo gst-launch-1.0 videotestsrc ! v4l2sink
Setting pipeline to PAUSED ...
ERROR: Pipeline doesn't want to pause.
ERROR: from element /GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0: Device '/dev/video1' is not a output device.
Additional debug info:
v4l2_calls.c(639): gst_v4l2_open (): /GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0:
Capabilities: 0x4a00000
Setting pipeline to NULL ...
Freeing pipeline ...
提前致谢。
您的问题标题表明您想要写入虚拟视频设备。 v4l2 设备既可以是输入视频设备,也可以是输出视频设备。您的相机是视频输入(捕获)设备。在 gstreamer 中引导 v4l2sink(因此是管道的端点)可能会失败。
但是您可以生成虚拟输出设备。您正在寻找的是 v4l2-loopback 设备之类的东西。它允许您生成虚拟 /dev/video10
设备,如下所示:
modprobe v4l2loopback video_nr=10
同一错误消息的另一种可能解决方案:重新创建 v4l2loopback 接口:
sudo rmmod -f v4l2loopback
sudo modprobe v4l2loopback
这可能适用于遇到原始问题错误消息的其他人,但是他们已经意识到他们需要一个 v4l2loopback 设备作为 gstreamer 接收器。
当尝试将视频流式传输到我之前使用 ffmpeg 流式传输到的现有 v4l2loopback 设备时,我收到了相同的错误消息
Device '/dev/video0' is not a output device.
调查
在使用 diff
比较工作环回视频设备和非工作视频设备(即用 ffmpeg 写入后)与 v4l2-ctl --all -d 0
的状态时,我发现了以下差异:
--- working 2020-11-19 18:03:52.499440518 +0100
+++ non-working 2020-11-19 18:03:57.472802868 +0100
@@ -3,21 +3,18 @@
Card type : GPhoto2 Webcam
Bus info : platform:v4l2loopback-000
Driver version : 5.9.8
- Capabilities : 0x85208002
- Video Output
+ Capabilities : 0x85208000
Video Memory-to-Memory
Read/Write
Streaming
Extended Pix Format
Device Capabilities
- Device Caps : 0x05208002
- Video Output
+ Device Caps : 0x05208000
Video Memory-to-Memory
Read/Write
Streaming
Extended Pix Format
Priority: 0
-Video output: 0 (loopback in)
Format Video Output:
Width/Height : 960/640
Pixel Format : 'YU12' (Planar YUV 4:2:0)
不知何故,“视频输出”功能是 gstreamer 成功工作所必需的,但被我之前的 ffmpeg 调用取消了。
该行为仅在我使用 exclusive_caps=1
选项加载 v4l2loopback 模块时发生,请参阅 1.
解决方案是卸载/加载 v4l2loopback 内核命令,强制删除 v4l2loopback 内核模块并使用 rmmod / modprobe 再次添加它(见上文)。
我在 Ubuntu 19.04
试过 examplegst-launch-1.0 videotestsrc ! v4l2sink device=/dev/video10
但是 gstreamer 失败了
Setting pipeline to PAUSED ...
ERROR: Pipeline doesn't want to pause.
ERROR: from element /GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0: Cannot identify device '/dev/video10'.
Additional debug info:
v4l2_calls.c(609): gst_v4l2_open (): /GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0:
system error: No such file or directory
Setting pipeline to NULL ...
Freeing pipeline ...
为什么不起作用?我没有在文档中找到这个,我需要以某种方式创建 /dev/video10 吗?
我对默认设备 /dev/video1 做了同样的操作,但它是我笔记本电脑上的输入摄像头设备:
sudo gst-launch-1.0 videotestsrc ! v4l2sink
Setting pipeline to PAUSED ...
ERROR: Pipeline doesn't want to pause.
ERROR: from element /GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0: Device '/dev/video1' is not a output device.
Additional debug info:
v4l2_calls.c(639): gst_v4l2_open (): /GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0:
Capabilities: 0x4a00000
Setting pipeline to NULL ...
Freeing pipeline ...
提前致谢。
您的问题标题表明您想要写入虚拟视频设备。 v4l2 设备既可以是输入视频设备,也可以是输出视频设备。您的相机是视频输入(捕获)设备。在 gstreamer 中引导 v4l2sink(因此是管道的端点)可能会失败。
但是您可以生成虚拟输出设备。您正在寻找的是 v4l2-loopback 设备之类的东西。它允许您生成虚拟 /dev/video10
设备,如下所示:
modprobe v4l2loopback video_nr=10
同一错误消息的另一种可能解决方案:重新创建 v4l2loopback 接口:
sudo rmmod -f v4l2loopback
sudo modprobe v4l2loopback
这可能适用于遇到原始问题错误消息的其他人,但是他们已经意识到他们需要一个 v4l2loopback 设备作为 gstreamer 接收器。
当尝试将视频流式传输到我之前使用 ffmpeg 流式传输到的现有 v4l2loopback 设备时,我收到了相同的错误消息
Device '/dev/video0' is not a output device.
调查
在使用 diff
比较工作环回视频设备和非工作视频设备(即用 ffmpeg 写入后)与 v4l2-ctl --all -d 0
的状态时,我发现了以下差异:
--- working 2020-11-19 18:03:52.499440518 +0100
+++ non-working 2020-11-19 18:03:57.472802868 +0100
@@ -3,21 +3,18 @@
Card type : GPhoto2 Webcam
Bus info : platform:v4l2loopback-000
Driver version : 5.9.8
- Capabilities : 0x85208002
- Video Output
+ Capabilities : 0x85208000
Video Memory-to-Memory
Read/Write
Streaming
Extended Pix Format
Device Capabilities
- Device Caps : 0x05208002
- Video Output
+ Device Caps : 0x05208000
Video Memory-to-Memory
Read/Write
Streaming
Extended Pix Format
Priority: 0
-Video output: 0 (loopback in)
Format Video Output:
Width/Height : 960/640
Pixel Format : 'YU12' (Planar YUV 4:2:0)
不知何故,“视频输出”功能是 gstreamer 成功工作所必需的,但被我之前的 ffmpeg 调用取消了。
该行为仅在我使用 exclusive_caps=1
选项加载 v4l2loopback 模块时发生,请参阅 1.
解决方案是卸载/加载 v4l2loopback 内核命令,强制删除 v4l2loopback 内核模块并使用 rmmod / modprobe 再次添加它(见上文)。