在Qt + Opencv中导入Gstreamer视频

时间:2014-02-19 17:40:19

标签: c++ qt opencv gstreamer

我使用gstreamer通过无线网络传输网络摄像头 我使用Arm板进行流式传输并在我的电脑中接收。 想要导入在qt中收到的视频,以便与opencv一起使用。

使用此命令流式传输视频:

./capture -c 10000 -o | gst-launch-0.10 -v -e filesrc location=/dev/fd/0 ! h264parse ! rtph264pay ! tcpserversink host=127.0.0.1 port=8080

和接收:

gst-launch udpsrc port=1234 ! "application/x-rtp, payload=127" ! rtph264depay ! ffdec_h264 ! xvimagesink sync=false

如何在qt中使用收到的视频。 我想用于图像处理。

2 个答案:

答案 0 :(得分:1)

您需要编写自己的应用程序以进行接收,而不是使用gst-launch。为此,请参阅gstreamer.freedesktop.org上的文档。特别是应用程序开发手册http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/index.html

要在Qt窗口内使用视频,您可以使用GstXOverlay / GstVideoOverlay界面告诉xvimagesink在哪里绘制视频(窗口ID)。

gstreamer中有一个opencv插件,它包含了opencv中的一些函数/过滤器。如果您没有实现您感兴趣的功能,您可以将其包装在新的gstreamer元素中以便使用它。或者,您可以编写一个缓冲区探测器来修改应用程序中的缓冲区,并自行调用opencv进行处理。

从你的gst-launch行我可以看到你使用的是版本0.10。如果可能的话,你应该考虑转移到1.x版本,因为0.10已经过时且没有使用。如果您必须坚持使用0.10,请在查找文档时注意,以确保您正在阅读适合您版本的文档。

答案 1 :(得分:1)

最佳解决方案是使用QtGstreamer在Qt环境中使用gstreamer捕获和流式传输视频。主要优点是您可以将管道描述插入到String中,库将为您进行硬编码。您将避免自己编写所有管道组件的代码。但是,您必须编写自己的接收器以使用OpenCV捕获的帧。 http://gstreamer.freedesktop.org/data/doc/gstreamer/head/qt-gstreamer/html/index.html