首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇到虚拟v4l2设备

汇到虚拟v4l2设备
EN

Stack Overflow用户
提问于 2020-03-23 06:05:46
回答 2查看 5.6K关注 0票数 2

我在Ubuntu19.04上尝试了一个示例

代码语言:javascript
复制
gst-launch-1.0 videotestsrc ! v4l2sink device=/dev/video10

但是gstreamer失败了

代码语言:javascript
复制
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 10?

对于默认设备/dev/video1 1,我也是这样做的,但它是我的笔记本电脑上的一个输入相机设备:

代码语言:javascript
复制
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 ...

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-23 08:29:35

你问题的标题表明你想要写到一个虚拟视频设备。v4l2设备可以是输入和输出视频设备。你的相机是一个视频输入(捕捉)设备。在gstreamer中引导v4l2sink (因此是管道的端点)可能会失败。

但是,您可以生成虚拟输出设备。您要寻找的是类似于V4L2-回环设备的东西。它允许您生成这样的虚拟/dev/video10设备:

代码语言:javascript
复制
modprobe v4l2loopback video_nr=10
票数 3
EN

Stack Overflow用户

发布于 2020-11-19 17:14:41

对于同一错误消息,另一个可能的解决方案是:重新创建v4l2loopback接口:

代码语言:javascript
复制
sudo rmmod -f v4l2loopback
sudo modprobe v4l2loopback

这可能适用于从最初的问题中遇到错误消息的其他人,,但是已经意识到他们需要一个v4l2loopback设备作为GStreamer接收器。

当试图将视频流到我以前使用ffmpeg的现有v4l2loopback设备时,我收到了相同的错误消息。

设备‘/dev/video0 0’不是一个输出设备。

调查

在比较工作回送视频设备和不工作视频设备(即用ffmpeg写入后)和使用v4l2-ctl --all -d 0使用diff的状态时,我发现了以下区别:

代码语言:javascript
复制
--- 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调用所剥夺。只有当我用v4l2loopback选项加载exclusive_caps=1模块时,才会发生这种行为,请参阅1

解决方案是卸载/加载v4l2loopback内核命令,强制删除v4l2loopback内核模块并使用rmmod / and探测重新添加它(参见上文)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60808632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档