Gstreaming - 通过 TCP 连接两个网络摄像头

Gstreaming - 通过 TCP 连接两个网络摄像头

我试图播放两个网络摄像头只需一个 gstreaming 命令,我就能启动单个摄像头:

gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! videoscale ! video/x-raw,width=320,height=240  ! vp8enc ! webmmux ! tcpserversink port=8080

这个想法是开始另一台摄像机,但位于不同的路径上,可能是 IP 或 PORT,但按照标准我只尝试了不同的端口:

gst-launch-1.0 tee name=stream v4l2src device=/dev/video0 ! video/x-raw,width=640,height=480,framerate=12/1 ! vp8enc ! webmmux ! tcpserversink port=8080 stream. v4l2src device=/dev/video2 ! video/x-raw,width=640,height=480,framerate=12/1 ! vp8enc ! webmmux ! tcpserversink port=8081 stream.

需要使用 webm 输出和 muxer

但我总是收到这个错误:意外引用“流”忽略

按照这种模式我发现这里

gst-launch-1.0 tee name=stream v4l2src device=/dev/video0 ! image/jpeg,width=800,height=600,framerate=30/1 ! jpegparse ! jpegdec ! xvimagesink stream. v4l2src device=/dev/video1 ! image/jpeg,width=800,height=600,framerate=30/1 ! jpegparse ! jpegdec ! xvimagesink stream.

答案1

我建议阅读 gst-launch 语法(https://gstreamer.freedesktop.org/documentation/tools/gst-launch.html) 以更好地理解那里的错误。您创建一个元素并为其命名:stream。然后在整个管道描述中使用此引用。

我们来看看这个部分:

jpegdec ! xvimagesink stream. v4l2src device=/dev/video1 ! image/jpeg,width=800,height=600,framerate=30/1

您正在将 jpegdec 链接到 xvimagesink,然后您就在那里引用了 stream。然后您正在创建一个 v4l2src 并链接到一个 capsfilter。您刚才在中间引用的“stream”元素没有做任何事情,也没有链接到任何人。所以这是无效的语法,它会失败。

我相信您实际上并不想要 tee 元素,因此您可以完全删除它及其引用。tee 的用途如下:https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/gstreamer-plugins-tee.html

此外,您还可以拥有 2 个独立的管道,每个摄像头一个。在一个或两个管道上执行此操作取决于您想要如何管理以及它们是否需要共享一些与管道相关的数据,例如时钟。但这取决于您的用例,我对此了解不多。

相关内容