我正在尝试实现服务器,该服务器将被视为类似 ONVIF Profile M - 分析设备。就目前而言,大多数端点的实现方式使得 Onvif Device Manager 可以与我的服务器成功通信,但是一旦我开始实现流功能和元数据,问题就出现了。
就我的理解而言,它应该或多或少地以这样的方式工作:
我试图使用 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 容器内。我如何处理端口映射,因为当我运行容器时我还不知道客户端将请求哪个端口?发布所有端口(我知道这通常是非常糟糕的做法)并不能解决问题,因为它们将被随机映射。