前言

onvif是一种网络摄像头协议,linux网络摄像头这一块是需要移植onvif协议的,整个移植过程是这样的,首先onvif协议是依赖于gsoap的,所以需要先将gsoap编译安装,再通过gsoap生产的库和程序去编译onvif,完成后此时onvif程序能跑,但是不能被odm软件识别到,所以还需要再编译wsdd,通过wsdd就可以让odm软件搜索到了。

前期准备

下载源码

整个项目和源码我已经全部上传至我的gitee,可直接下载

https://gitee.com/luo-honghua/onvif.git




android下onvif库 onvif 安卓_android下onvif库


交叉编译器

不会安装交叉编译器的可参考我这篇文章

ubuntu安装交叉编译器arm-linux-gcc_ubuntu arm-linux-gcc

虚拟机环境

我用的虚拟机环境是16.04 64位版本,下载地址

Ubuntu 16.04.7 LTS (Xenial Xerus)

源码编译

由于虚拟机环境好做调试,建议先用虚拟机的gcc将其编译出来运行,后续测试无误再用交叉编译器编译出来放到arm环境运行

桌面新建一个文件夹onvif,将下载好的源码全部放入其中并提取出来


android下onvif库 onvif 安卓_arm_02


gsoap编译安装

进入gsoaop-2.8文件夹,先进行裁剪,执行以下命令

./configure --enable-samples --enable-ipv6 --enable-ipv6-v6only --prefix /home/lhh/桌面/onvif/gsoap

其中--prefix表示安装路径

裁剪没问题后直接编译安装

make
make install

onvif编译

进入onvif_srvd-master文件夹,源码已经裁剪好了,修改makefile即可

先将gsoap安装目录bin下的两个程序复制到onvif源码目录


android下onvif库 onvif 安卓_linux_03


android下onvif库 onvif 安卓_linux_04


再将12、13行的路径改为gsoap源码路径,将19、20行改为当前路径


android下onvif库 onvif 安卓_android下onvif库_05


然后就是生成版本,一般我们只要release版本,将debug删除既可,或者你不做操作的话会生成两个版本的程序


android下onvif库 onvif 安卓_arm_06


最后就是将build_gsoap这部分删除,因我上面已经安装了gsoap的源码


android下onvif库 onvif 安卓_android下onvif库_07


没问题后会在当前目录下生成可执行程序onvif_srvd


android下onvif库 onvif 安卓_arm_08


wsdd编译

同样也是和上面的步骤,先将那两个程序复制过来,然后改makefile,一样的改法,将12、13行的路径改为gsoap源码路径,将19、20行改为当前路径,选择release和debug版本,最后将gsoap的安装删除,make没问题后同样也会生成一个可执行程序


android下onvif库 onvif 安卓_linux_09


运行

将脚本文件放进去,把run-onvif_srvd.sh放入onvif_srvd-master文件夹,将run-wsdd.sh放入wsdd-master文件夹,用记事本打开脚本文件需要做一些更改

run-onvif_srvd.sh脚本需要将onvif_srvd_debug改为你实际的程序名,如我这里需要改为onvif_srvd,eth0需要改为你实际网卡名称,比如虚拟机的网卡名一般为ens33,则需要将其改为ens33


android下onvif库 onvif 安卓_android下onvif库_10


run-wsdd.sh脚本文件需要将wsdd_debug改为你实际的程序名,eth0需要改为你实际网卡名称


android下onvif库 onvif 安卓_Powered by 金山文档_11


完成上面的准备后,windows上先打开odm(onvif device manager)软件


android下onvif库 onvif 安卓_Powered by 金山文档_12


把两个程序都跑起来


android下onvif库 onvif 安卓_android下onvif库_13


此时就能在odm软件上看到虚拟机里的onvif跑起来了


android下onvif库 onvif 安卓_android下onvif库_14


后记

以上完成后可以先在虚拟机上做调试,做好功能后就可以用交叉编译器重新编译一份出来,再放到arm上运行,也是没问题的,中间如果遇到编译出现问题的话不要着急,先看一下是什么问题,有可能是虚拟机环境的问题,百度一下,安装相应库文件就能解决。

如果我的文章有帮助到你,请帮忙点个赞*-*