通过ONVIF编程访问海康威视摄像机时出现GetProfiles问题

时间:2019-02-26 13:44:03

标签: soap onvif

问题:

我在开发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进行测试。我已经使用完整的管理员用户将身份验证设置为基本身份验证。

问题是海康威视摄像机始终返回“未执行可选动作” 错误,这是他们说“我们不喜欢您发送的内容”的方式。

我应该注意,Core命令(例如“ GetServices”和“ GetCapabilities”)可以正常工作。

ONVIF上有很多宝贵的经验教训。我认为这是一个仍在努力站稳脚跟的标准。

我唯一看到的是this post

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

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

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

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

1 个答案:

答案 0 :(得分:1)

似乎您正在将所有请求发布到同一URI。 GetCapabilitiesGetProfiles属于设备管理服务,而GetServices属于媒体服务,该媒体服务可能具有不同的URI(必须使用{{1}}进行验证)

ONVIF规范非常丰富,建议您从ONVIF Application Programming Guide开始。它为您提供了有关如何构建应用程序的想法。