【问题标题】:Onvif device not found by Onvif device managerOnvif 设备管理器未找到 Onvif 设备
【发布时间】:2016-08-05 12:05:11
【问题描述】:

我正在尝试使用 gsoap 实现具有 onvif 配置文件标准的相机设备服务器。在 ws 动态发现上,当我尝试在 https://github.com/mpromonet/ws-discovery/blob/master/gsoap/server.cpp 中运行代码时,Onvif 设备管理器对我的 probematches 消息没有给出任何答案。我可以看到我正在收到探测消息,发送探测匹配消息,但 Onvif 设备管理器只是忽略了它们。 我对我的设备进行了这些参数更改:

const int   _metadataVersion = 1;
static const char* _xaddr= "http://10.0.0.50:1881";
const char* _type="tdn:NetworkVideoTransmitter " "tds:Device " ;
const char* _scope=
        "onvif://www.onvif.org/name/ru "
        "onvif://www.onvif.org/hardware/hw "
        "onvif://www.onvif.org/Profile/Streaming "
        "onvif://www.onvif.org/location/ANY "
        "onvif://www.onvif.org/type/video_encoder onvif://www.onvif.org/type/audio_encoder onvif://www.onvif.org/type/ptz ";

const char* _endpoint="urn";

我尝试了很多参数,但我找不到解决方案。我需要进行哪些更改才能被 Onvif 设备管理器发现?

【问题讨论】:

    标签: web-services gsoap service-discovery onvif


    【解决方案1】:

    如您所见,您使用的命名空间(tdn & tds)并未在生成的命名空间(在 gen/wsdd.nsmap 中)中声明:

    #include "soapH.h"
    SOAP_NMAC struct Namespace namespaces[] =
    {
            {"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope", NULL},
            {"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding", NULL},
            {"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL},
            {"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL},
            {"wsa", "http://schemas.xmlsoap.org/ws/2004/08/addressing", NULL, NULL},
            {"wsdd", "http://schemas.xmlsoap.org/ws/2005/04/discovery", NULL, NULL},
            {NULL, NULL, NULL, NULL}
    };
    

    要使用限定名称指定wsdd:ProbeType,您应该使用:

    "http://www.onvif.org/ver10/network/wsdl":NetworkVideoTransmitter

    这可以通过指定-t 参数来实现:

    ws-discovery.exe -t \"http://www.onvif.org/ver10/network/wsdl\":NetworkVideoTransmitter \
                     -x http://10.0.0.50:1881
    

    或修改代码:

    const char* _type="\"http://www.onvif.org/ver10/network/wsdl\":NetworkVideoTransmitter" ;
    

    【讨论】:

    • 例子中的IP地址,就是你要找的摄像头的地址吗?
    • @Murphybro2:这是发送 WS-Discovery 探测可发现的摄像头的 http 地址。然后客户端就可以使用这个http地址查询摄像头,发送一些onvif请求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多