首页 > 解决方案 > 通过 ONVIF 以编程方式访问海康威视摄像机时的 GetProfiles 问题

问题描述

问题:

我有许多用于开发 Cocoa ONVIF 驱动程序的测试摄像机。我有 AXIS、大华和海康威视(到目前为止,还会有更多)。

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

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

如果我向他们发送直接 URI,大多数人都可以返回 RTSP 图像数据(我知道,这就是大多数“ONVIF”应用程序的工作方式)。

我想要做的是使用“适当的渠道”来访问这些设备。

这意味着运行 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。我已使用完整的管理员用户将身份验证设置为基本。

问题在于,海康威视摄像机始终返回“未执行可选操作”故障,这是他们表示“我们不喜欢您发送的内容”的方式。

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

ONVIF 上有宝贵的经验教训。我认为这是一个仍在努力独立站起来的标准。

我唯一看到的就是这个帖子

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

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

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

如果是这样,它是如何解决的?我正在学习厌恶 ONVIF 规范,因为很难找到详细的数据包描述。

标签: soaponvif

解决方案


您似乎将所有请求发布到同一个 URI。属于设备管理服务,而GetServices属于媒体服务,它可能有不同的 URI(这是你必须用 验证的东西)。GetCapabilitiesGetProfilesGetServices

ONVIF 规范很丰富,建议从ONVIF 应用程序编程指南开始。它让您了解如何构建应用程序。


推荐阅读