通过 ONVIF 以编程方式访问海康威视摄像头时出现 GetProfiles 问题

GetProfiles Issue When Accessing Hikvision Cameras Programmatically Via ONVIF

问题:

我在开发 Cocoa ONVIF 驱动程序时使用了一些测试相机。我有安讯士、大华和海康威视(目前为止-还会有更多)。

所有相机都声称符合 Profile S 和 Profile G。

AXIS 摄像机是唯一表现符合预期的摄像机。

如果我向他们发送直接 URI,大多数 return RTSP 图像数据(据我所知,这似乎是大多数 "ONVIF" 应用程序的工作方式)。

我想做的是使用 "proper channels" 访问这些设备。

这意味着 运行 MANDATORY GetProfiles 查询,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
 xmlns:trt="http://www.onvif.org/ver10/media/wsdl">
    <soap:Body>
        <trt:GetProfiles/>
    </soap:Body>
</soap:Envelope>

那是教科书。直接来自 ONVIF 应用程序编程指南。我正在使用 REST 注入应用程序来测试它,使用 POST。我已将身份验证设置为基本,使用完全管理员用户。

问题是海康威视摄像头一直return一个"Optional Action Not Implemented"故障,这是他们的说法"We don't like what you sent"。

我应该注意到核心命令,如 "GetServices" 和 "GetCapabilities" 工作得很好。

ONVIF 上几乎没有宝贵的经验教训。我认为这是一个仍在努力自立的标准。

我唯一看到的是this post

这不适用于我。当我使用任一 WSDL 版本时都会发生同样的问题。

当我对可以连接到相机的应用程序进行 Wireshark 时,我看到的只是它们直接发送了一个 RTSP URI。没有提到 "GetProfiles".

我的问题是其他人遇到过这个问题吗?

如果有,是怎么解决的?我开始讨厌 ONVIF 规范,因为很难找到详细的数据包描述。

您似乎将所有请求都发布到同一个 URI。 GetServicesGetCapabilities 属于 Device management Service,而 GetProfiles 属于 Media Service,它可以有不同的 URI(这是你必须用 GetServices 验证的东西) .

ONVIF的规格比较丰富,建议从ONVIF Application Programming Guide开始。它让您了解如何构建您的应用程序。