【问题标题】:How to parse an ONVIF metadata from RTSP stream in QT?如何从 QT 中的 RTSP 流中解析 ONVIF 元数据?
【发布时间】:2015-03-24 10:51:31
【问题描述】:

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

其他一些想法不起作用,所以我改用其他解决方案。

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

流效果很好,视频效果很好。

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

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

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

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

【问题讨论】:

    标签: qt stream rtsp libvlc onvif


    【解决方案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。

    【讨论】:

    • 谢谢,我花了一整天的时间寻找! ;-)
    • 你拯救了这一天!作为参考:我使用 G722 depayloader 的代码作为模板,将 depay_process 替换为您建议的代码。它就像一个魅力。谢谢。
    【解决方案2】:

    您需要以某种方式附加到 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 指针中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-07
      • 2015-06-29
      • 2012-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多