首先,我使用 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/