离职了,在准备上学还有一大段时间,前些日子由于工作需要,公司要求用海康的网络摄像头做出客户端程序,采集视频,并在LCD上显示出视频,故研究onvif协议,,现将心得写出。
本次搭建onvif框架采用的是周立功官网发布的Ubuntu 64位版本。版本为12.04.参考教程为许振坪的专栏。
Onvif是一种全球通用的、开放的、标准的接口,使用这个接口来获取网络摄像头的各种参数或音视频流,服务端与客户端的数据交互采用SOAP协议,音视频流则采用RTP/RTSP进行,其接口是web services形式。
Gsoap工具将wsdl文档生成c或c++代码,从而生成webservice客户端。
Web services服务可以提供各种远程调用的接口函数。
网络摄像头:IPC
这样,如图1所示,我们就将采用gsoap工具来生成onvif的框架代码,自己只专注于客户端的应用开发,然后其中调用的函数通过gsoap工具生成的框架代码转变成web services形式,再发送给IPC。反过来,IPC发给客户端的数据是web service形式,通过框架直接转变为各种接口函数。这样大大较少中间过程的开发。
在生成之前,需要安装下载前置软件(2017年8月21):注意安装顺序,gsoap需要在其他之后安装。
bison-3.0.4.tar.gz
flex-2.6.4.tar.gz
openssl-1.1.0f.tar.gz
gsoap_2.8.51.zip
使用命令解压并安装他们:
Bison:
tar -xvf bison-3.0.4.tar.gz
cd bison-3.0.4/
./configure
make
sudo make install
flex:
tar -xvf flex-2.6.4.tar.gz
cd flex-2.6.4/
./configure
make
sudo make install
openssl:
tar -xvf openssl-1.1.0f.tar.gz
cd openssl-1.1.0f/
./config --prefix=/opt/openssl--openssldir=/usr/local/ssl
make
make install
gsoap:
unzip gsoap_2.8.51.zip
cd gsoap-2.8
./configure --with-openssl=/opt/openssl
make
make install
安装gsoap工具成功后会有提示,如图2:
看看能否运行
wsdl2h -h
wsdl2h: error while loading sharedlibraries: libssl.so.1.0.0: cannot open shared object file: No such file ordirectory
提示找不到ssl的动态库,将动态库路径加上去
echo /opt/openssl/lib>>/etc/ld.so.conf
ldconfig
说明没问题了。
因为基本每个网络摄像头都需要输入用户名和密码,即认证。故需要调用soap_wsse_add_UsernameTokenDigest函数,所以,在onvif.h头文件中加入#import“wsse.h”
这里我直接给出许振坪的命令来生成框架:
mkdir -p samples/onvif
wsdl2h -P -x-c -s -t ./typemap.dat -o samples/onvif/onvif.hhttps://www.onvif.org/ver10/network/wsdl/remotediscovery.wsdlhttps://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdlhttps://www.onvif.org/ver10/media/wsdl/media.wsdl
soapcpp2 -2 -C mkdir -p samples/onvif -L -c-x -I import:custom -d samples/onvif/ samples/onvif/onvif.h
成功后提示如图4:
复制其他需要的源代码:
cp stdsoap2.c stdsoap2.h plugin/wsaapi.cplugin/wsaapi.h custom/duration.c custom/duration.h samples/onvif/
至此,框架已经搭建完成,剩下的就是应用程序的编写了,由于我当初只做到这一步,连c++都不会,应用程序完全是照搬许振坪的,故到此为止。
这是一篇记录onvif框架搭建的文章,并不适用与所有人。详细教程请移步许振坪的专栏。
所用到的源代码:
http://download.csdn.net/download/qq904305159/9945347
wget -O m4-1.4.9.tar.gzhttp://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz
tar -zvxf m4-1.4.9.tar.gz
cd m4-1.4.9
./configure
make
make install
1. 安装ntpdate工具
# sudo apt-get install ntpdate
2. 设置系统时间与网络时间同步
# ntpdate cn.pool.ntp.org
3. 将系统时间写入硬件时间
# hwclock –systohc
如图5:
修改import\wsa5.h文件,将int SOAP_ENV__Fault修改为int SOAP_ENV__Fault_alex,但是之前工作的时候虽然注意到了,但是并没有这个问题???版本问题??