ONVIF客戶端開發

2021-07-23 05:30:19 字數 3531 閱讀 3472

在使用 gsoap 框架生成**之後, 得到檔案:

soapc.c 

soapclient.c

stdsoap2.c stdsoap2.h

duration.c

wsdd.h

我們利用現有的soapclient, 呼叫api構建onvif請求(包括xml, http client). 開發前需要了解一下onvif官網文件指導: onvif 2.0 service operation index;該文件列舉了onvif的各個模組下的各種方法. 再回到gsoap框架, 同樣, 它的文件說明也比較詳細.

//建立各種soap

#define soap_new() soap_new1(soap_io_default)

#define soap_new1(mode) soap_new2(mode, mode)

#define soap_new2(imode, omode) soap_versioning(soap_new)(imode, omode)

//初始化各種soap

#define soap_init(soap) soap_init1(soap, soap_io_default)

#define soap_init1(soap, mode) soap_init2(soap, mode, mode)

#define soap_init2(soap, imode, omode) soap_versioning(soap_init)(soap, imode, omode)

//該函式soap_done函式呼叫的時候釋放, 無需呼叫free函式

soap_malloc(struct soap *soap, size_t n)

//釋放臨時cache

soap_end(struct soap *soap)

//釋放所以記憶體模組和關閉socket

soap_done(struct soap *soap)

//銷毀soap物件

#define soap_destroy(soap) soap_delete((soap), null)

另外,除錯程式介面資訊可以開啟log level, 如cmake下

set(cmake_c_flags "$ -o0 -ggdb -ddebug")
使用巨集debug開啟並輸出除錯資訊到 recv.log, send.log, test.log .

裝置搜尋步驟:

(1) 初始化客戶端

初始化客戶端, 包括uuid位址, 超時設定,頭部資訊等.

struct saop* onvif_init_soap(struct soap_env__header *header,

const

char *wsa_to,

const

char *wsa_action,

int timeout,

userinfo_s *puser); //設定mac值

char _hwid[1024];

unsigned

int flagrand;

soap = soap_new();

if (soap == null)

//設定命名空間

soap_set_namespaces(soap, namespaces);

if (timeout > 0)else

soap_default_soap_env__header(soap, header);

srand((int)time(0));

flagrand = rand() % 9000 + 1000; //取4位數

sprintf(_hwid, "urn:uuid:%ud68a-1dd2-11b2-a1025-%02x%02x%02x%02x%02x%02x",

flagrand, macaddr[0], macaddr[1], macaddr[2], macaddr[3], macaddr[4], macaddr[5]);

header->wsa__messageid = (char *)soap_malloc(soap, 100);

memset(header->wsa__messageid, 0, 100);

strncpy(header->wsa__messageid, _hwid, strlen(_hwid));

if (puser != null)

if (wsa_action != null)

if (wsa_to != null)

soap->header = header;

return soap;

}

(2) 設定probe搜尋引數

wsdd__probetype req;

struct __wsdd__probematches resp;

wsdd__scopestype sscope;

struct soap_env__header header;

struct soap *soap = null;

const

char *wsa_to = "urn:schemas-xmlsoap-org:ws:2005:04:discovery";

const

char *wsa_action = "";

const

char *soap_endpoint = "soap.udp:";

soap = onvif_init_soap(&header, wsa_to, wsa_action, 5, null);

soap_default_soap_env__header(soap, &header);

soap->header = &header;

soap_default_wsdd__scopestype(soap, &sscope);

sscope.__item = "";

soap_default_wsdd__probetype(soap, &req);

req.scopes = &sscope;

req.types = "";

(3) 傳送probe action

retval =soap_send___wsdd__probe(soap, soap_endpoint, null, &req);
(4) 接收probematches

while(retval == soap_ok)else

sleep(1);

}}//else

}else

if (soap->error)else

break;

}//else if

}//while

(5) 釋放資源

soap_destroy(soap);

soap_end(soap);

soap_free(soap);

gsoap及onvif開發客戶端框架的生成(一)

2.離線生成onvif.h檔案 需要執行命令 wsdl2h o onvif.h c s t typemap.dat devicemgmt.wsdl media.wsdl event.wsdl display.wsdl deviceio.wsdl imaging.wsdl ptz.wsdl recei...

XFire客戶端開發

引入 xfire相關的類庫 1.使用wsdl生成靜態客戶端 訪問任意語言編寫的web service 2.使用介面生成靜態客戶端 必須拿到服務端的介面class檔案 遠端 工廠 xfireproxyfactory factory new xfireproxyfactory 建立服務模型 servic...

electron windows客戶端開發探索

話不多說,直接開幹。起因 乙個用electron框架開發的windows版瀏覽器需要我負責了。擼 將不知道的點記錄下來,僅供後續檢視。start chcp 65001 electron chcp 65001解釋 設定cmd顯示為utf 8編碼,windows cmd視窗執行此命令後cmd顯示不在亂碼...