前言
onvif是一种网络摄像头协议,linux网络摄像头这一块是需要移植onvif协议的,整个移植过程是这样的,首先onvif协议是依赖于gsoap的,所以需要先将gsoap编译安装,再通过gsoap生产的库和程序去编译onvif,完成后此时onvif程序能跑,但是不能被odm软件识别到,所以还需要再编译wsdd,通过wsdd就可以让odm软件搜索到了。
前期准备
下载源码
整个项目和源码我已经全部上传至我的gitee,可直接下载
https://gitee.com/luo-honghua/onvif.git
交叉编译器
不会安装交叉编译器的可参考我这篇文章
ubuntu安装交叉编译器arm-linux-gcc_ubuntu arm-linux-gcc
虚拟机环境
我用的虚拟机环境是16.04 64位版本,下载地址
Ubuntu 16.04.7 LTS (Xenial Xerus)
源码编译
由于虚拟机环境好做调试,建议先用虚拟机的gcc将其编译出来运行,后续测试无误再用交叉编译器编译出来放到arm环境运行
桌面新建一个文件夹onvif,将下载好的源码全部放入其中并提取出来
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源码目录
再将12、13行的路径改为gsoap源码路径,将19、20行改为当前路径
然后就是生成版本,一般我们只要release版本,将debug删除既可,或者你不做操作的话会生成两个版本的程序
最后就是将build_gsoap这部分删除,因我上面已经安装了gsoap的源码
没问题后会在当前目录下生成可执行程序onvif_srvd
wsdd编译
同样也是和上面的步骤,先将那两个程序复制过来,然后改makefile,一样的改法,将12、13行的路径改为gsoap源码路径,将19、20行改为当前路径,选择release和debug版本,最后将gsoap的安装删除,make没问题后同样也会生成一个可执行程序
运行
将脚本文件放进去,把run-onvif_srvd.sh放入onvif_srvd-master文件夹,将run-wsdd.sh放入wsdd-master文件夹,用记事本打开脚本文件需要做一些更改
run-onvif_srvd.sh脚本需要将onvif_srvd_debug改为你实际的程序名,如我这里需要改为onvif_srvd,eth0需要改为你实际网卡名称,比如虚拟机的网卡名一般为ens33,则需要将其改为ens33
run-wsdd.sh脚本文件需要将wsdd_debug改为你实际的程序名,eth0需要改为你实际网卡名称
完成上面的准备后,windows上先打开odm(onvif device manager)软件
把两个程序都跑起来
此时就能在odm软件上看到虚拟机里的onvif跑起来了
后记
以上完成后可以先在虚拟机上做调试,做好功能后就可以用交叉编译器重新编译一份出来,再放到arm上运行,也是没问题的,中间如果遇到编译出现问题的话不要着急,先看一下是什么问题,有可能是虚拟机环境的问题,百度一下,安装相应库文件就能解决。
如果我的文章有帮助到你,请帮忙点个赞*-*