Gstreamer ONVIF - 将元数据添加到流中

问题描述 投票:0回答:0

我正在尝试实现服务器,该服务器将被视为类似 ONVIF Profile M - 分析设备。就目前而言,大多数端点的实现方式使得 Onvif Device Manager 可以与我的服务器成功通信,但是一旦我开始实现流功能和元数据,问题就出现了。

就我的理解而言,它应该或多或少地以这样的方式工作:

  1. ODM(或我设备的任何客户端)有时会发送 GetStreamURI 请求
  2. 服务器以 RTSP 服务器的 URI 进行响应
  3. 客户端发送RTSP请求OPTION
  4. 服务器响应可用选项列表
  5. 客户端发送RTSP请求DESCRIBE
  6. 服务器以适当的 SDP 进行响应,其中包含可用端点(视频、音频、元数据)的列表以及每个源的有效负载类型。
  7. 根据客户端正在寻找的内容,它会将 SETUP 请求发送到正确的端点,根据协议,它还会发送期望提供流的端口。

我试图使用 Gstreamer 实现 RTSP 服务器,但是我不确定应该如何处理上面提到的一些问题:

我可以轻松创建流式传输视频的 RTSP 服务器,因为我还可以设置流式传输某些文本元数据的 UDP 流,但我无法通过 RTSP 发送文本元数据(例如边界框)。无论我如何尝试对齐管道,解码有效负载类型或管道组件之间的协商功能总是会出现问题。

我很难理解应该如何处理 DESCRIBE 请求:就像在 ODM 中一样,它是在基本端点 (rtsp://address:port) 上发送的,但请求的其余部分是根据 SDP 的内容发送的。至于 Gstreamer RSTPServer - 它已将安装点设置为 RTSPMediaFactory,据我了解,RTSPMediaFactory 将在自己的端点(在我的示例中为 /video、/metadata)中实现特定流。但似乎 gstreamer 的 RTSPServer 本身无法响应 DESCRIBE 请求,因为此功能是在每个 RTSPMediaFactory 中处理的。我也无法编辑基于创建的管道生成的 SDP。是否可以实现这样的 RTSP 服务器,在单独的端点上同步 /metadata 和 /video,这些端点是在某个主端点上定义的?

我最近发现有一个 gst-rst-plugins 软件包,其中包含一些 ONVIF 功能,例如 onvifmetadatacombiner - 是否可以使用此聚合器来实现我需要的功能?这样的管道应该是什么样子的?我找不到任何 gst-rst-onvif 插件的使用示例。

与此主题相关的另一个问题是:我需要将此服务器包装在 docker 容器内。我如何处理端口映射,因为当我运行容器时我还不知道客户端将请求哪个端口?发布所有端口(我知道这通常是非常糟糕的做法)并不能解决问题,因为它们将被随机映射。

python docker gstreamer onvif
© www.soinside.com 2019 - 2024. All rights reserved.