问题:
我在开发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规范,因为很难找到详细的数据包描述。
答案 0 :(得分:1)
似乎您正在将所有请求发布到同一URI。 GetCapabilities
和GetProfiles
属于设备管理服务,而GetServices
属于媒体服务,该媒体服务可能具有不同的URI(必须使用{{1}}进行验证)
ONVIF规范非常丰富,建议您从ONVIF Application Programming Guide开始。它为您提供了有关如何构建应用程序的想法。