该篇文章主要是参考了网络上的资料整合起来的,给自己做一个备份
2005年由AXIS、BOSCH、SONY三个公司联手推出的一个[国际开放型网络视频产品标准网络接口开发论坛]
Open Network Video Interface Forum 开放型网络接口论坛.
ONVIF 标准将为网络视频设备之间的信息交换定义通用协议,即ONVIF规范包括装置搜寻、实时视频、音频、元数据和控制信息等!
(1) ONVIF规范描述了网络视频的模型、接口、数据类型以及数据交互的模式.
(2) ONVIF规范的目标是实现一个网络视频框架协议,使得不同厂商所生产的网络视频产品(包括摄录前端,录像设备等)完全互通.
(3) ONVIF规范中设备管理和控制部分所定义的接口均以Web Services 的形式提供.
(4) ONVIF规范涵盖了完全的XML和WSDL的定义.
(5) 服务端和客户端的数据交互采用SOAP协议
(6)ONVIF中的其他部分,比如音视频流,则通过RTP/RTSP进行
(1)协同性: 不同厂商所提供的产品,均可以通过一个统一的"语言"来进行交流,方便了系统的集成
(2) 灵活性: 终端用户和集成用户不需要被某些设备的固有解决方案所束缚,大大降低了开发成本
(3) 质量保证: 不断扩展的规范将由市场来导向,遵循规范的同时也满足主流的用户需求.
(4) 由于采用WSDL+XML模式,使得ONVIF规范的后续扩展不会遇到太多的麻烦.
(5) XML极强的扩展性和SOAP协议开发的便捷性将吸引更多的人来关注和使用ONVIF规范
客户端根据WSDL描述文档,会生成一个SOAP请求消息,该请求会被嵌入在一个HTTP POST请求中,发送到Web Services所在的Web服务器.------>Web Services 请求处理器解析收到的SOAP请求,调用相应的Web Services.然后再生成相应的SOAP应答------>Web服务器 得到SOAP应答后,会再通过HTTP应答的方式把信息送回到客户端
详细介绍了web serveces和soap等 https://www.cnblogs.com/fnng/p/5524801.html
(1) Web Services 是基于网络的、分布式的模块化组件,执行特定的任务.
(2) Web Services 主要利用HTTP和SOAP协议使数据在Web 上传输.
(3) Web 用户能够使用SOAP和HTTP 通过Web调用的方法来调用远程对象.
(4) Web Services 是基于XML和HTTP的一种服务,其通信主要基于SOAP.
(5) 服务端和客户端,以传递符合XML的SOAP消息,实现服务的请求与回应.
WSDL是Web Services 描述语言 (Web Services Description Language)的缩写.是一个用来描述Web服务和说明如何与Web服务通信的XML语言,为用户提供详细的接口说明书
SOAP 是Simple Object Access Protocol 的缩写. 是基于XML的一种协议,是建立再HTTP基础上的.
一条SOAP消息就是一个普通的XML 文档,包含下列元素
(1)必须的 Envelope 元素, 可以把此XML文档标识为一条SOAP消息
(2)可选的Header 元素,包含头部信息
(3)必须的Body 元素,包含所有的调用和响应信息
(4)可选的Fault 元素,提供有关在处理此消息所发生错误的信息
在向Web Service 发送的SOAP请求中Body元素中的字段需要与 WSDL中数据类型相符合.在构建SOAP的过程中,必须从WSDL文件中获取并映射这一种对应关系.然后这样一个对应过程将是充满了重复性和机械性的,为了避免不必要的人工差错以及节约开发时间,一个名为gSOAP的编译工具应运而生.
gSOAP利用编译器技术提供,了一组透明化的SOAP API 并将与开发无关的SOAP实现细节相关的内容对用户隐藏起来.通过将WSDL文件解析序列化为C/C++文件,最小化了Web Service的开发过程
设备发现
设备管理
设备输入输出服务
图像配置
媒体配置
实时流媒体
接收端配置
显示服务
事件处理
PTZ控制
其他
CMU (center manager unit) ,中心管理单元
PU (perfocus unit) ,监控前端单,负责在CMU的控制下:
(1) 使用摄像机采集视频流
(2) 使用麦克风采集音频流
(3) 使用控制口采集报警信息
(4) 对摄像机云台镜头进行控制
CU (client unit) ,监控系统的监控客户端单元,负责将PU采集到的视频流、音频流、报警信息提交给监控用户,并且根据用户要求操作PU设备,如云台,镜头等.
(1) PU设备上线后,向CMU注册,建立连接(长连接)
(2) CMU与PU进行信令交互、请求能力集、获取配置等
(3) CU上线,向CMU注册,建立连接
(4) CMU与CU进行信令交互,传输设备列表
(5) CU向PU请求码流
(1) PU设备上线后,向CMU发送HELLO消息
(2) CMU需要搜寻设备时,向PU发送proble消息
(3) CMU与PU进行信令交互,请求能力集,获取配置
(4) CU上线,向CMU注册,建立连接
(5) CMU与CU进行信令交互,传输设备列表
(6) 在CMU的协调下,CU同PU建立连接传输码流
(1) PU和CMU的连接方式改变,不再是长连接
(2) 因为遵循了ONVIF规范,信令以及消息内容有了统一的标准
生成源码框架前,需要进行gsoap的安装
这里介绍的是生成完整的ONVIF源码框架,根据项目要求的不同是可以生成对应的源码框架的,只需要修改typemap.dat 以及后面跟着的WSDL文件路径
输入命令
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/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/ver10/media/wsdl/media.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/onvif/ver10/schema/onvif.xsd http://www.onvif.org/ver10/actionengine.wsdl
soapcpp2 -c onvif.h -x -I /root/onvif/gsoap-2.8/gsoap/import -I /root/onvif/gsoap-2.8/gsoap/
在Makefile文件中添加CC = gcc -DEBUG
打开调试宏后,默认在程序运行的目录产生三个文件
RECV.log
ONVIF接收到的SOAP数据,每接收一条,都会进行记录
SENT.log
ONVIF发送SOAP数据,每发送一条,都会进行记录
TEST.log
RECV.log和SENT.log可以通过wireshark工具抓包代替,但是TEST.log是代替不了的,
TEST.log记录了ONVIF实时的工作状态,尤其是在出现segmentation fault 错误的时候
TEST.log 几乎成为唯一的定位错误的手段
基本就是通过分析TEST.log进行错误位置定位,然后解决
描述ProfileS是什么样的一个东西,如何实现
Onvif DVT设计参考,指明了一条道路,但没有具体内容
Onvif Media的说明介绍
onvif几乎全部命令的详细说明,非常重要。该文档告诉我们结构体成员的意义和如何填充。Onvif开发其实就是各种结构体的填充。
十分感谢以下博主有关ONVIF的分享:
max_min_
许振坪
ghostyu