onvif 客户端的发现
生活随笔
收集整理的這篇文章主要介紹了
onvif 客户端的发现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、解壓:unzip -X gsoap_2.8.10.zip 編譯
2、下載:
wget http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl
3、復制:
cp gsoap-2.8/gsoap/typemap.dat .
4、在typemap.dat 中添加:
#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 = "http://www.onvif.org/ver10/events/wsdl" tls = "http://www.onvif.org/ver10/display/wsdl" tmd = "http://www.onvif.org/ver10/deviceIO/wsdl" timg = "http://www.onvif.org/ver20/imaging/wsdl" trt = "http://www.onvif.org/ver10/media/wsdl" tptz = "http://www.onvif.org/ver20/ptz/wsdl" trv = "http://www.onvif.org/ver10/receiver/wsdl" trc = "http://www.onvif.org/ver10/recording/wsdl" tse = "http://www.onvif.org/ver10/search/wsdl" trp = "http://www.onvif.org/ver10/replay/wsdl" tan = "http://www.onvif.org/ver20/analytics/wsdl" tad = "http://www.onvif.org/ver10/analyticsdevice/wsdl" tdn = "http://www.onvif.org/ver10/network/wsdl" tt = "http://www.onvif.org/ver10/schema" # OASIS recommended prefixes wsnt = "http://docs.oasis-open.org/wsn/b-2" wsntw = "http://docs.oasis-open.org/wsn/bw-2" wsrfbf = "http://docs.oasis-open.org/wsrf/bf-2" wsrfr = "http://docs.oasis-open.org/wsrf/r-2" wsrfrw = "http://docs.oasis-open.org/wsrf/rw-2" wstop = "http://docs.oasis-open.org/wsn/t-1" # 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 = struct SOAP_ENV__Envelope { struct SOAP_ENV__Header *SOAP_ENV__Header; _XML SOAP_ENV__Body; }; | struct SOAP_ENV__Envelope SOAP_ENV__Header = | struct SOAP_ENV__Header SOAP_ENV__Fault = | struct SOAP_ENV__Fault SOAP_ENV__Detail = | struct SOAP_ENV__Detail SOAP_ENV__Code = | struct SOAP_ENV__Code SOAP_ENV__Subcode = | struct SOAP_ENV__Subcode SOAP_ENV__Reason = | struct SOAP_ENV__Reason
6、./wsdl2h -o onvif.h -c -s -t typemap.dat remotediscovery.wsdl
7、./soapcpp2 -c onvif.h -x -I /workplace/mywork/onvif/gsoap-x86/gsoap-2.8/gsoap/import
8、復制文件:
cp gsoap-2.8/gsoap/stdsoap2.* .
9、測試代碼:
#include <iostream> #include "wsdd.nsmap" #include "soapH.h" using namespace std; int main() {struct soap *soap;struct wsdd__ProbeType req;struct __wsdd__ProbeMatches resp;struct wsdd__ScopesType sScope;struct SOAP_ENV__Header header;int count = 0;int result = 0; char guid_string[100];soap = soap_new(); if(soap==NULL){return -1;}soap_set_namespaces(soap, namespaces); soap->recv_timeout = 5; //超過5秒鐘沒有數據就退出soap_default_SOAP_ENV__Header(soap, &header);header.wsa__MessageID = guid_string;header.wsa__To= "urn:schemas-xmlsoap-org:ws:2005:04:discovery";header.wsa__Action= "http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe";soap->header = &header;soap_default_wsdd__ScopesType(soap, &sScope);sScope.__item = "";soap_default_wsdd__ProbeType(soap, &req);req.Scopes = &sScope;req.Types = "";result = soap_send___wsdd__Probe(soap, "soap.udp://239.255.255.250:3702", NULL, &req);do{result = soap_recv___wsdd__ProbeMatches(soap, &resp); if (soap->error) { cout<<"soap error:"<<soap->error<<soap_faultcode(soap)<<"---"<<soap_faultstring(soap)<<endl; result = soap->error; break;} else{cout<<"========================================="<<endl;cout<<"Match size:"<<resp.wsdd__ProbeMatches->__sizeProbeMatch<<endl;cout<<"xsd-unsignedInt:"<<resp.wsdd__ProbeMatches->ProbeMatch->MetadataVersion<<endl;cout<<"scopes item:"<<resp.wsdd__ProbeMatches->ProbeMatch->Scopes->__item<<endl;//cout<<"scopes matchby:"<<resp.wsdd__ProbeMatches->ProbeMatch->Scopes->MatchBy<<endl;cout<<"QName:"<<resp.wsdd__ProbeMatches->ProbeMatch->Types<<endl;cout<<"xsd:string:"<<resp.wsdd__ProbeMatches->ProbeMatch->wsa__EndpointReference.Address<<endl;cout<<"xsd:QName:"<<resp.wsdd__ProbeMatches->ProbeMatch->wsa__EndpointReference.PortType<<endl;cout<<"wsa:ServiceNameType:"<<resp.wsdd__ProbeMatches->ProbeMatch->wsa__EndpointReference.ServiceName<<endl;cout<<"sequence of elements:"<<resp.wsdd__ProbeMatches->ProbeMatch->wsa__EndpointReference.__size<<endl;cout<<"xsd:anyType:"<<resp.wsdd__ProbeMatches->ProbeMatch->wsa__EndpointReference.__anyAttribute<<endl;cout<<"endpoint any:"<<resp.wsdd__ProbeMatches->ProbeMatch->wsa__EndpointReference.__any<<endl;cout<<"wsdd:UriListType:"<<resp.wsdd__ProbeMatches->ProbeMatch->XAddrs<<endl;}}while(1);soap_destroy(soap); // remove deserialized class instances (C++ only) soap_end(soap); // clean up and remove deserialized datasoap_done(soap);return result; }編譯:g++ cc.cpp soapC.c ?stdsoap2.cpp soapClient.c -I/gsoap-2.8/gsoap
10、運行:./a.out
結果:
1、因為有多個ip(多個網卡)
xy@xy-pc:/workplace/mywork/onvif/gsoap-x86/mytest/myonvif/test$ ./a.out soap error:-10x8a29778---0x8a2977c2、只有一個網卡,且ip所在網段正好有兩個支持onvif的設備: xy@xy-pc:/workplace/mywork/onvif/gsoap-x86/mytest/myonvif/test$ ./a.out ========================================= Match size:1 xsd-unsignedInt:1 scopes item:onvif://www.onvif.org/type/video_encoder onvif://www.onvif.org/type/ptz onvif://www.onvif.org/type/audio_encoder onvif://www.onvif.org/type/network_video_transmitter onvif://www.onvif.org/hardware/DM368 onvif://www.onvif.org/location/country/china onvif://www.onvif.org/name/Dahua QName:tdn:NetworkVideoTransmitter xsd:string:urn:uuid:5b71c61f-220b-475d-9eca-dd7941f07767 xsd:QName:0 wsa:ServiceNameType:0 sequence of elements:0 xsd:anyType: endpoint any:0 wsdd:UriListType:http://192.168.9.110:9988/onvif/device_service soap error:-10x87a99f8---0x87a99fc xy@xy-pc:/workplace/mywork/onvif/gsoap-x86/mytest/myonvif/test$ xy@xy-pc:/workplace/mywork/onvif/gsoap-x86/mytest/myonvif/test$ xy@xy-pc:/workplace/mywork/onvif/gsoap-x86/mytest/myonvif/test$ ./a.out ========================================= Match size:1 xsd-unsignedInt:1 scopes item:onvif://www.onvif.org/type/video_encoder onvif://www.onvif.org/type/ptz onvif://www.onvif.org/type/audio_encoder onvif://www.onvif.org/type/network_video_transmitter onvif://www.onvif.org/hardware/DM368 onvif://www.onvif.org/location/country/china onvif://www.onvif.org/name/Dahua QName:tdn:NetworkVideoTransmitter xsd:string:urn:uuid:5b71c61f-220b-475d-9eca-dd7941f07767 xsd:QName:0 wsa:ServiceNameType:0 sequence of elements:0 xsd:anyType: endpoint any:0 wsdd:UriListType:http://192.168.9.110:9988/onvif/device_service soap error:-10x86929f8---0x86929fc
參考:
http://my.oschina.net/yunuo/blog/119206
http://blog.csdn.net/ghostyu/article/details/8182516
總結
以上是生活随笔為你收集整理的onvif 客户端的发现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu squid 做http代理
- 下一篇: shell命令直接分区