qt - 如何从 QT 中的 RTSP 流解析 ONVIF 元数据?

标签 qt stream rtsp libvlc onvif

首先,我使用 QMediaPlayer 构建了一些示例,但它无法处理 RTSP 流(ubuntu 14.04 上的 GStreamer 0.10 存在问题)。

其他一些想法没有用,所以我转向其他解决方案。

我已经基于 LibVLC 和 vlc-qt DemoPlayer 示例(QT 5.4.1)构建了一个 qt 播放器。

流媒体运作良好,视频非常棒。

我想从 IP 摄像机的 RTSP 流中解析 ONVIF 元数据流(它发送一些包含对象移动等信息的简单 xml 数据),并根据从流中收集的元数据绘制一些线条。

我在寻找获取该数据的正确位置时遇到了一些麻烦。

据我所知,LibVLC 会忽略它无法解析的流部分。

有没有人试过做类似的事情并为我指明正确的方向,或者我走错了路,有更好的解决方案吗?:)

最佳答案

有了 gst-launch,您可以简单地使用这个管道:

gst-launch-1.0 rtspsrc location=camera_uri ! application/x-rtp, media=application ! fakesink dump=true

您将在终端中获得相机元数据。 但是这个数据会有rtp包头。要删除它,您必须编写 depayloader 元素。 (我没有找到任何),只删除 rtp header 。

depayloader处理方法示例:

static GstBuffer *
gst_rtp_xml_depay_process (GstRTPBaseDepayload * depayload, GstBuffer   *   buf)
{
  guint8 *payload;
  GstRTPBuffer rtp = { NULL };
  GstRtpXMLDepay *rtpxmldepay;
  rtpxmldepay = GST_RTP_XML_DEPAY (depayload);
  gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp);
  payload = (guint8*)gst_rtp_buffer_get_payload_buffer (&rtp);
  return (GstBuffer*)payload;
}

如果您想在应用中获取元数据,可以使用 appsink。

关于qt - 如何从 QT 中的 RTSP 流解析 ONVIF 元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29230656/

相关文章:

c++ - QtableView 将整行设置为只读

c++ - 带 LGPL 的二维绘图库

c++ - 检测图像中的区域。 QT 中的重叠小部件可能吗?

c++ - pyconfig.h fatal error 'io.h' 找不到文件

iphone - iOS:具有暂停、前进功能的流式音频文件

c++ - 检查 RTSP Stream 是否结束

c# - 从流中读取数据的最有效方式

gstreamer - 如何使用 gstreamer 从网络摄像机发布 RTSP 流?

tcp - 通过 TCP 使用 RTSP 抓取视频

linux - 将 movflags 添加到 mp4 文件的顶部,而不使用 ffmpeg 进行实时 RTSP 流