上周弄了一周都没有弄出来,今天又去研究了下ONVIF Device Test Tool。终于有所发现了。
首先肯定是soap,关于鉴权的soap就不展开说了。
然后是获取能力。这里我是获取了所有能力。
接着是GetProfiles,为了得到在控制PTZ时的token。
代码已经调试通了某华和某康的IPC。
一开始我们用的是某华,在GetProfiles是的地址是PTZ的。但是在兼容某康时,变成了为实现可选项。通过上面说到的工具发现。用的token是Media的。但是控制的时候的地址是PTZ的。
下面上代码。实现的是相对位移的接口。
int onvif_OptPTZ(char* strIp, int port, char* user, char* password, ptz_common commond, float move_step)
{
int result = 0;
struct SOAP_ENV__Header Header;
struct soap *soap = NULL;
char *strOptPtz = NULL;
char *strGetToken = NULL;
//鉴权信息
USERINFO stUserInfo;
USERINFO *pAuth = NULL;
memset(&stUserInfo, 0x0, sizeof(stUserInfo));
if(user == NULL || password == NULL)
{
pAuth = NULL;
}
else
{
snprintf(stUserInfo.username, 64, "%s", user);
snprintf(stUserInfo.password, 32, "%s", password);
pAuth = &stUserInfo;
}
//创建一个带鉴权的soap
soap = ONVIF_Initsoap(&Header, NULL, NULL, 5, pAuth);
if(NULL == soap)
{
printf("FUNCTION:(%s) ----