如何在QT中解析RTSP流中的ONVIF元数据?

时间:2015-03-24 10:51:31

标签: qt stream rtsp libvlc onvif

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

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

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

视频流效果很好,视频就像魅力一样。

我想解析来自IP Camera的RTSP流的ONVIF元数据流(它发送一些简单的xml数据,包含有关对象移动的信息等),并根据从流中收集的元数据绘制一些行。

我找到合适的地方获取数据时遇到了一些麻烦。

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

有没有人试图做那样的事情,并指出我正确的方向,或者我可能在错误的轨道上并且有更好的解决方案?:)

2 个答案:

答案 0 :(得分:1)

使用gst-launch,您只需使用此管道:

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

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

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。

答案 1 :(得分:0)

你需要以某种方式附加到GStreamer信号" handle-request"如此处所述:

http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/html/gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc-handle-request

您需要的数据应包含在user_data指针中。