原文:http://blog.youkuaiyun.com/ghostyu/article/details/8182516
说明:网上关于ONVIF开发的文章并不多,也更找不到具体的实例来入
门学习。只能靠翻阅各种Specification摸索中前进,下面是最近几天的成果。调通了服务端(或者说设备端)的Discovery,使用
OnvifTestTool12.06能够搜到我的设备。【来自http://blog.youkuaiyun.com/ghostyu】
1、在使用wsdl2h产生头文件前需要修改typemap.dat,
修改的依据在这里:~engelen/soap.html,在FAQ页面下的How do I use gSOAP for the ONVIF specifications?
#Use gSOAP 2.8.10 and up. In the typemap.dat file used by wsdl2h, add:
# ONVIF recommended prefixes
tds = "http://www.onvif.org/ver10/device/wsdl"
tev = ""
tls = ""
tmd = "http://www.onvif.org/ver10/deviceIO/wsdl"
timg = ""
trt = ""
tptz = ""
trv = ""
trc = ""
tse = ""
trp = ""
tan = ""
tad = "http://www.onvif.org/ver10/analyticsdevice/wsdl"
tdn = ""
tt = ""
# OASIS recommended prefixes
wsnt = ""
wsntw = ""
wsrfbf = ""
wsrfr = ""
wsrfrw = ""
wstop = ""
# WS-Discovery 1.0 remapping
wsdd10__HelloType = | wsdd__HelloType
wsdd10__ByeType = | wsdd__ByeType
wsdd10__ProbeType = | wsdd__ProbeType
wsdd10__ProbeMatchesType = | wsdd__ProbeMatchesType
wsdd10__ProbeMatchType = | wsdd__ProbeMatchType
wsdd10__ResolveType = | wsdd__ResolveType
wsdd10__ResolveMatchesType = | wsdd__ResolveMatchesType
wsdd10__ResolveMatchType = | wsdd__ResolveMatchType
# SOAP-ENV mapping
SOAP_ENV__Envelope = structSOAP_ENV__Envelope {structSOAP_ENV__Header *SOAP_ENV__Header; _XML SOAP_ENV__Body; }; |structSOAP_ENV__Envelope
SOAP_ENV__Header = | structSOAP_ENV__Header
SOAP_ENV__Fault = | structSOAP_ENV__Fault
SOAP_ENV__Detail = | structSOAP_ENV__Detail
SOAP_ENV__Code = | structSOAP_ENV__Code
SOAP_ENV__Subcode = | structSOAP_ENV__Subcode
SOAP_ENV__Reason = | structSOAP_ENV__Reason
2、根据onvif官网提供的remotediscovery.wsdl产生onvif.h头文件
关于onvif所有的wsdl都在这里:http://www.onvif.org/Documents/Specifications.aspx中的
ONVIF WSDL and XML Schemas
Specifications一节,虽然可以全部下载为wsdl文件,但是wsdl文件中存在相互依赖的关系,并且是带有存储的依赖,所以最好直接使用
url来产生头文件,不要下载下来。
wsdl2h -o onvif.h -c -s -t ./typemap.dat
3、使用onvif.h来产生骨架代码
soapcpp2 -c onvif.h -x -I /root/onvif/gsoap-2.8/gsoap/import -I /root/onvif/gsoap-2.8/gsoap/
4、ProbeMatches代码
这样就创建了基本的服务端和客户端的代码了