【问题标题】:Gstreamer pipeline capsGstreamer 管道盖
【发布时间】:2016-09-02 20:59:39
【问题描述】:

我可以在构建 Gstreamer 管道时使用一些帮助。 目的是从 RaspiCam 捕获视频,然后将视频流式传输到另一个 RPi,在其间的传输 RPi 上使用 OpenCV 进行图像处理(对象跟踪)。 但是我在编码方面遇到了问题,而且我对我应该使用的女巫知之甚少。

我查看了这个Adding opencv processing to gstreamer application 并试图让gst-rpicamsrc 捕获用于管道的凸轮。但我似乎无法弄清楚如何解码(?)视频,以便我可以在 OpenCV 中使用它。 videotestsrc 没问题,但 rpicamsrc 显然还有其他属性。

"rpicamsrc ! " "h264parse ! " "tee name=cam ! " "video/x-h264, width=640, height=480, format=RGB ! " "omxh264dec ! " "videoconvert ! " "appsink name=sink sync=true ! " ".cam rtph264pay ! " "rtprtxqueue ! " "udpsink host=127.0.0.1 sync=false port=5000"

我也尝试过更短的管道,但只能使用 videotestsrc。

我确实担心队列会给图像处理带来严重的延迟,而且由于我想跟踪对象,它可能还不够好。

我也尝试过使用 VideoCapture cap("rpicamsrc !appsink") 和 cap("v4l2src !videodecode !video/x-raw !appsink) 等等.. 而且我已经尽了最大的努力将接收端与相反方向的解码器进行匹配,但是我的知识太有限了..

任何建议将不胜感激!

【问题讨论】:

  • 首先,您不必在元素名称周围使用双引号 (")。队列只是缓冲数据以提供流畅的播放,并将后续元素的处理传递给不同的线程 - 它非常有用,通常在任何地方添加队列只会帮助事情(但不要从字面上理解)你可以用 rpicamsrc 玩本地化吗?另外我必须警告你 tee 是 h264 东西非常危险的元素(尤其是x264enc)所以先尝试没有它
  • 你可以试试这个(或类似的 - 与其他水槽)GST_DEBUG=3 gst-launch-1.0 rpicamsrc name=src preview=0 fullscreen=0 ! h264parse ! omxh264dec ! glimagesink sync=0

标签: opencv gstreamer pipeline raspberry-pi3


【解决方案1】:

根据 VideoCapture 的文档:

  • “文件名”参数不限于文件系统路径,可以是下列之一: *
      • 正常的文件系统路径:
    • 例如video.avi 或 /path/to/video.avi 或 C:\video.avi
      • 一个 uri:
    • 例如file:///path/to/video.avi 或 rtsp:///path/to/stream.asf
      • gstreamer 管道描述:
    • 例如视频测试src!视频转换!应用程序
    • appsink 名称应为“appsink0”(默认)或“opencvsink”

请注意,appsink 的名称必须是 one 或 appsink0 或 opencvsink,而您将其简称为 sink。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多