qt - 如何从 QT 中的 RTSP 流解析 ONVIF 元数据?

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

https://stackoverflow.com/questions/29230656/

相关文章:

github - 如何查看用户的 github 拉取请求评论列表?

python - 如何访问图中特定顶点的名称(python-igraph)

c# - 使用 Roslyn 时如何验证方法中的参数类型

google-app-engine - Google App Engine 删除了默认的 GCS 存

portable-executable - 为什么 PE 格式位置依赖?

regex - R - 从文件中读取行的部分匹配

camunda - 控制部署的 Camunda BPM 的版本

r - 如何动态更改 R 中现有函数的一行

c# - 从 Roslyn 中的方法符号生成方法签名的语法

dns - 为 DMARC 等将 DNS IN TXT 记录拆分为多行