1. 说明
onvif开发的资料比较多,可以根据需要来选择。本文侧重从头开始且偏实际操作,实现从生成代码,到实现发现设备,其他功能后续实现。
如果想直接调试,可以从GITHUB上获取一些代码直接使用。
如果从头开始可以参考这篇文章:
ONVIF客户端搜索设备获取rtsp地址开发笔记(精华篇)
如果要系统学习,可以参考(这是一个系列):
ONVIF协议网络摄像机(IPC)客户端程序开发
ONVIF:Open Network Video Interface Forum 开放型网络视频接口论坛 相当于大家都按照这个标准来实现指定的接口
WSDL: Web Services Description Language 网络服务描述语言 用于描述 Web Services 以及如何对它们进行访问
也就是说摄像头实现了onvif协议,我们可以通过网络调用onvif的接口函数从而实现一些功能。比如发现摄像头设备,从而获取摄像头音视频流地址等等服务,
设备发现是使用约定的组播地址:239.255.255.250:3702,在实际应用中,可能要注意组播路由的设置。尤其是linux系统。
2. 生成代码
生成代码使用soap工具
1.1 下载soap工具
1.2 修改代码
gsoap/import/ wsa5.h
将277行int SOAP_ENV__Fault修改为int SOAP_ENV__Fault_alex
1.3 编译
./configure
make
make install
可能出现问题 stdsoap2.h:695: fatal error: openssl/bio.h:
解决:
sudo apt-get install openssl
为了安装OpenSSL通常的库文件,首先使用以下命令来确定在Ubuntu系统中可获得的库文件的应用版本:
sudo apt-cache search libssl | grep SSL
sudo apt-get install libssl-dev
1.4 产生 C 代码框架,包含客户端和服务器代码
wsdl2h -o onvif.h -c -s -t ./typemap.dat http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl http://www.onvif.org/onvif/ver10/event/wsdl/event.wsdl http://www.onvif.org/onvif/ver10/display.wsdl http://www.onvif.org/onvif/ver10/deviceio.wsdl http://www.onvif.org/onvif/ver20/imaging/wsdl/imaging.wsdl http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl http://www.onvif.org/onvif/ver10/receiver.wsdl http://www.onvif.org/onvif/ver10/recording.wsdl http://www.onvif.org/onvif/ver10/search.wsdl http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl http://www.onvif.org/onvif/ver10/replay.wsdl http://www.onvif.org/onvif/ver20/analytics/wsdl/analytics.wsdl http://www.onvif.org/onvif/ver10/analyticsdevice.wsdl http://www.onvif.org/ver10/actionengine.wsdl http://www.onvif.org/ver10/pacs/accesscontrol.wsdl http://www.onvif.org/ver10/pacs/doorcontrol.wsdl
在onvif.h中添加 import "wsse.h" 添加对openssl的支持,实现鉴权
soapcpp2 -c onvif.h -x -I../gsoap-2.8/gsoap/import -I../gsoap-2.8/gsoap/ -I../gsoap-2.8/gsoap/custom -I../gsoap-2.8/gsoap/extras
以上代码完成代码生成,可以基于生成的代码进行下一步开发
网友评论