0

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

我已经查看了这个将 opencv 处理添加到 gstreamer 应用程序 ,并试图让gst-rpicamsrc捕获 cam 以在管道中使用。但我似乎无法弄清楚如何解码(?)视频,以便我可以在 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) 等等。我已经尽我所能将接收端与解码器相匹配相反的方向,但我的知识太有限了..

任何建议将不胜感激!

4

1 回答 1

0

根据 VideoCapture 的文档:

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

请注意,appsink 的名称必须是 one 或 appsink0 或 opencvsink,而您只是简单地称它为 sink。

于 2017-02-08T15:05:48.843 回答