ONVIF

ONVIF相关学习

      • 声明
  • 什么是ONVIF
  • ONVIF规范的作用和优势
      • 规范的作用
      • 规范的优势
  • ONVIF规范的实现机制
      • Web Services
      • WSDL
      • SOAP
  • ONVIF规范的内容
  • ONVIF规范的应用
      • 对本小节中用到的一些名词进行统一的说明
      • 传统视频监控系统的一个局域网应用场景
      • 应用ONVIF规范后的场景
      • ONVIF规范的应用带来了什么变化
  • 生成ONVIF源码框架
      • 从wsdl生成c头文件
      • 从头文件生成源码框架
  • ONVIF开发常用调试方法
        • 打开ONVIF调试开关,以便让ONVIF打印一些可用的调试信息
        • 一些常见的错误解决方法
  • 一些参考文档
      • ==ONVIF Profile S Specification==
      • ==Reference_of_ONVIF_Development_v1.01.02==
      • ==ONVIF-Media-Service-Spec-v220==
      • ==http://www.onvif.org/onvif/ver20/util/operationIndex.html==
  • 致谢

声明

该篇文章主要是参考了网络上的资料整合起来的,给自己做一个备份

什么是ONVIF

2005年由AXIS、BOSCH、SONY三个公司联手推出的一个[国际开放型网络视频产品标准网络接口开发论坛]
Open Network Video Interface Forum 开放型网络接口论坛.
ONVIF 标准将为网络视频设备之间的信息交换定义通用协议,即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规范

ONVIF规范的实现机制

客户端根据WSDL描述文档,会生成一个SOAP请求消息,该请求会被嵌入在一个HTTP POST请求中,发送到Web Services所在的Web服务器.------>Web Services 请求处理器解析收到的SOAP请求,调用相应的Web Services.然后再生成相应的SOAP应答------>Web服务器 得到SOAP应答后,会再通过HTTP应答的方式把信息送回到客户端

Web Services

详细介绍了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

WSDL是Web Services 描述语言 (Web Services Description Language)的缩写.是一个用来描述Web服务和说明如何与Web服务通信的XML语言,为用户提供详细的接口说明书

SOAP

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的开发过程

ONVIF规范的内容

设备发现
设备管理
设备输入输出服务
图像配置
媒体配置
实时流媒体
接收端配置
显示服务
事件处理
PTZ控制
其他

ONVIF规范的应用

对本小节中用到的一些名词进行统一的说明

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请求码流

应用ONVIF规范后的场景

    (1) PU设备上线后,向CMU发送HELLO消息
    (2) CMU需要搜寻设备时,向PU发送proble消息
    (3) CMU与PU进行信令交互,请求能力集,获取配置
    (4) CU上线,向CMU注册,建立连接
    (5) CMU与CU进行信令交互,传输设备列表
    (6) 在CMU的协调下,CU同PU建立连接传输码流

ONVIF规范的应用带来了什么变化

    (1) PU和CMU的连接方式改变,不再是长连接
    (2) 因为遵循了ONVIF规范,信令以及消息内容有了统一的标准

生成ONVIF源码框架

生成源码框架前,需要进行gsoap的安装
这里介绍的是生成完整的ONVIF源码框架,根据项目要求的不同是可以生成对应的源码框架的,只需要修改typemap.dat 以及后面跟着的WSDL文件路径

从wsdl生成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/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/

ONVIF开发常用调试方法

打开ONVIF调试开关,以便让ONVIF打印一些可用的调试信息

在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进行错误位置定位,然后解决

一些参考文档

ONVIF Profile S Specification

描述ProfileS是什么样的一个东西,如何实现

Reference_of_ONVIF_Development_v1.01.02

Onvif DVT设计参考,指明了一条道路,但没有具体内容

ONVIF-Media-Service-Spec-v220

Onvif Media的说明介绍

http://www.onvif.org/onvif/ver20/util/operationIndex.html

onvif几乎全部命令的详细说明,非常重要。该文档告诉我们结构体成员的意义和如何填充。Onvif开发其实就是各种结构体的填充。

致谢

十分感谢以下博主有关ONVIF的分享:
max_min_
许振坪
ghostyu

你可能感兴趣的:(网络摄像机(IP,Camera)学习)