Onvif 在linux 平台下的编译与移植(一)

Onvif的的标准、规范在此不赘述,论坛讲的很多

开门见山,介绍Onvif的编译、移植全过程:

第一步:

下载 gsoap

通过网址 :  https://sourceforge.net/projects/gsoap2/     下载 gsoap2.8.107 , 或者最新版本

./configure --prefix=/home/‘’username‘’/Desktop/gsoap2.8.107/(自己的选择的安装路径,但生成时并未成功,却直接生成在安装包目录下)

sudo make

make install

第二步:

用wsdl2h 生成 onvif.h 头文件

wsdl2h  所在路径: /home/‘’username‘’/Desktop/gsoap2.8.107/gsoap/bin/linux/  ,此目录生成时未获得成功

后来回到 gsoap2.8.107/根目录执行命令,成功生成文件。

在此之前,有两处做以下修改:

1)duration.c 文件,但是会遇到类型LONG64报错的问题;

        在 typemap.dat 文件中
        xsd__duration = #import “custom/duration.h” | xsd__duration
        取消注释
2)
新增支持h265的代码行 在typemap.data文件中添加
       trt     = "http://www.onvif.org/ver10/media/wsdl"
      trt2    = "http://www.onvif.org/ver20/media/wsdl"

做好以上两步修改之后,即可执行  onvif.h 文件生成命令

wsdl2h -P -x -c -s -t typemap.dat -o onvif.h \
http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl \
http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl \
http://www.onvif.org/ver20/media/wsdl/media.wsdl \
http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl \
http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl

wsdl分别对应:

  •            发现设备
  •            获取设备参数 
  •            获取视频流地址
  •            获取视频流地址
  •            PTZ控制

其中 option 选项对应如下:

  •        -P                        不创建从xsd 继承的多态性。
  •   -x         不生成xml 文件
  •   -s         不生成STL代码
  •   -c         生成纯C风格的头文件,这将去除C++的一些特性
  •        -o                           将wsdl转化为filename.h头文件。

第三步:

 soapcpp2 依赖 onvif.h 生成源文件代码:

  在此之前,做以下修改: 

  onvif.h 添加:   #import "wsse.h"  //鉴权认证   

   #import "wsdd10.h"	// wsdd10 = <http://schemas.xmlsoap.org/ws/2005/04/discovery>
   #import "xop.h"	// xop = <http://www.w3.org/2004/08/xop/include>
   #import "wsa5.h"	// wsa5 = <http://www.w3.org/2005/08/addressing>
   #import "wsse.h"  //鉴权认证   

 需要去import目录下修改wsa5.h,注释掉以下 这个 结构体 : SOAP_ENV__Fault

// Added
//gsoap SOAP_ENV service method-action: Fault http://www.w3.org/2005/08/addressing/soap/fault
/*int SOAP_ENV__Fault
(       _QName             faultcode,        // SOAP 1.1
        char            *faultstring,        // SOAP 1.1
        char            *faultactor,        // SOAP 1.1
        struct SOAP_ENV__Detail    *detail,        // SOAP 1.1
        struct SOAP_ENV__Code    *SOAP_ENV__Code,    // SOAP 1.2
        struct SOAP_ENV__Reason    *SOAP_ENV__Reason,    // SOAP 1.2
        char            *SOAP_ENV__Node,    // SOAP 1.2
        char            *SOAP_ENV__Role,    // SOAP 1.2
        struct SOAP_ENV__Detail    *SOAP_ENV__Detail,    // SOAP 1.2
    void
);
*/

做好以修改之后,即可执行 源文件生成命令

soapcpp2  -2 -c -x -L -I ../../import -I ../../import/custom -I ../../import/plugin -I ../../../gsoap/ onvif.h

 其中 option 选项对应如下:

  •        -2               Generate SOAP1.2 Bindings
  •        -c                产生纯C代码,否则是C++代码
  •   -C    仅生成客户端client代码 (此处仅生成服务端代码)
  •   -S    仅生成服务端server代码
  •   -x    不生成xml文件。不用此项的话,将对头文件中定义的每个operation生成一个描述性的xml文件
  •   -L    不生成soapClientLib文件和soapServerLib文件
  •        -I                指定import路径 

运行成功后,linux的命令窗口会显示successuf

在gosap2.8.107/目录下生成如下文件,如图高亮显示部分

第四步:

 用生成的源文件创建工程

源文件编译使用过程中如果遇到LONG64 ,SOAP_ENV__Fault 错误,请对照文档内容的注意点,重新编译检查,其他错误还需要根据实际使用情况调试。

调试遇到的bug和解决方法,总结后将在下一篇幅介绍

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值