onvif协议笔记

发布时间:2023年12月18日

一、简介

ONVIF官网
ONVIF协议网络摄像机(IPC)客户端程序开发(1):专栏开篇
onvif协议开发

二、gSOAP

gsoap官网

1、下载和编译

下载地址

#! /bin/sh
# 指定源码目录(解压源码)
GSOAP_SRC=gsoap-2.8
PWD=`pwd`
echo "build gsoap..."
cd $GSOAP_SRC
# 配置,指定安装目录
./configure --prefix=${PWD}/gsoap_x86
make -j8 && make install
cd -

2、生成,编译和测试

#! /bin/sh
# 指定使用工具目录,(编译出来的)
BIN_DIR=gsoap_x86/bin
PWD=`pwd`
# 指定生成代码目录
OUT_DIR=MobileCode
echo "auto code create"
echo ${PWD}
cd ${OUT_DIR}
# 生成头文件
${PWD}/../${BIN_DIR}/wsdl2h -o $1 -c -s -t typemap.dat $2
# 生成c文件
${PWD}/../${BIN_DIR}/soapcpp2 -2 -C -c -x -Iimport -Icustom $1
cd -
echo "OK"

最终会生成,以下文件
在这里插入图片描述
注意:stdsoap2.h 和 stdoap2.c 是从源码拷贝过来的。。。

测试是参考,ONVIF协议网络摄像机(IPC)客户端程序开发(4):使用gSOAP生成Web Services框架代码,感谢!!!!

#include <stdio.h>
#include "MobileCodeWSSoap.nsmap"
#include "soapH.h"

int main(int argc, char const *argv[])
{
    const char  *endpoint = "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx";

    struct soap *soap = NULL;
    struct _ns1__getMobileCodeInfo          req;
    struct _ns1__getMobileCodeInfoResponse  resp;

    soap = soap_new(); 
    soap_set_mode(soap, SOAP_C_UTFSTRING);

    memset(&req, 0x00, sizeof(req));
    req.mobileCode = argv[1];
    req.userID     = NULL;

    if(SOAP_OK == soap_call___ns1__getMobileCodeInfo(soap, endpoint, NULL, &req, &resp)) {
        if (NULL != resp.getMobileCodeInfoResult) {
            printf("%s\n", resp.getMobileCodeInfoResult);
        }
    }

    soap_destroy(soap);                                                         // delete deserialized objects
    soap_end(soap);

    soap_free(soap);
    return 0;
}

问题1:
在这里插入图片描述
问题原因:
stdsoap2.c 使用了 namespaces 全局变量,而头文件可以看到,定义的是一个数组,并且有外部声明。
在这里插入图片描述
在这里插入图片描述

可以看到,,生成的文件 MobileCodeWSSoap.nsmap 中有定义 namespaces,,将其引入到,,,程序中就可以了。。。,如下如,,,引入之后编译通过。。
在这里插入图片描述
在这里插入图片描述

三、重要方法封装

期待。。。

文章来源:https://blog.csdn.net/GeiGe123/article/details/135055683
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。