Onvif 设备管理器找不到 Onvif 设备
Onvif device not found by Onvif device manager
我正在尝试使用 gsoap 实现具有 onvif 配置文件标准的相机设备服务器。在 ws 动态发现上,当我尝试在 https://github.com/mpromonet/ws-discovery/blob/master/gsoap/server.cpp 中 运行 编码时,Onvif 设备管理器没有对我的探测匹配消息给出任何答复。我可以看到我收到了探测消息,发送了探测匹配消息,但 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 设备管理器发现?
如您所见,您使用的命名空间(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" ;
我正在尝试使用 gsoap 实现具有 onvif 配置文件标准的相机设备服务器。在 ws 动态发现上,当我尝试在 https://github.com/mpromonet/ws-discovery/blob/master/gsoap/server.cpp 中 运行 编码时,Onvif 设备管理器没有对我的探测匹配消息给出任何答复。我可以看到我收到了探测消息,发送了探测匹配消息,但 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 设备管理器发现?
如您所见,您使用的命名空间(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" ;