首先我使用QMediaPlayer构建了一些示例,但它无法处理RTSP流(ubuntu 14.04上的GStreamer 0.10问题)。
其他一些想法没有用,所以我改用其他解决方案。
我已经基于LibVLC和vlc-qt DemoPlayer示例构建了一个qt播放器(QT 5.4.1)。
视频流效果很好,视频就像魅力一样。
我想解析来自IP Camera的RTSP流的ONVIF元数据流(它发送一些简单的xml数据,包含有关对象移动的信息等),并根据从流中收集的元数据绘制一些行。
我找到合适的地方获取数据时遇到了一些麻烦。
据我所知,LibVLC忽略了无法解析的流的部分。
有没有人试图做那样的事情,并指出我正确的方向,或者我可能在错误的轨道上并且有更好的解决方案?:)
答案 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"如此处所述:
您需要的数据应包含在user_data指针中。