在Qt+Opencv中导入Gstreamer视频

Import Gstreamer video in Qt+Opencv

本文关键字:Gstreamer 视频 导入 Qt+Opencv      更新时间:2023-10-16

我使用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中使用接收到的视频应该怎么办。我想用于图像处理。

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

对于在Qt窗口中使用视频,您可以使用GstXOverlay/GstVideoOverlay接口来告诉xImagesink在哪里绘制视频(窗口id)。

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

从您的gst发布行中,我可以看到您使用的是0.10版本。如果可能的话,您应该考虑迁移到1.x版本,因为0.10已经过时并且没有关联。如果你必须坚持0.10,在寻找文档时要注意,确保你阅读的文档与你的版本相符。

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