3

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

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

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

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

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

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

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

有没有人试图做这样的事情并指出我正确的方向,或者我可能走错了路并且有更好的解决方案?:)

4

2 回答 2

3

使用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。

于 2015-06-29T09:03:21.743 回答
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 指针中。

于 2015-03-30T10:20:33.517 回答