onvif协议介绍

1. onvif是啥?

摄像头在我们的日常生活中可以说时随处可见。而在当下的时代,大多数摄像头都已经网络化,早期的网络摄像机硬件提供商都采用私有协议进行通讯。但随着时代的发展,摄像头的应用场景越来越多,各个摄像头的厂商也是百花齐放。私有协议终究会被淘汰。
为了解决这一困境,安讯士联合博世及索尼公司,共同制定了onvif(Open Network Video Interface Forum,开放型网络视频接口论坛)协议。

2. onvif可以做什么?

onvif协议涵盖了设备发现、设备配置、事件、PTZ控制、视频分析和实时流媒体直播功能,以及搜索,回放和录像录音管理功能。

3. onvif开发技术框架

ONVIF规范中设备管理和控制部分所定义的接口均以Web Services的形式提供。每一个支持ONVIF规范的终端设备均须提供与功能相应的Web Service。ONVIF中的其他部分比如音视频流则通过RTP/RTSP进行。
总结onvif协议的开发公式:ONVIF = 服务端 + 客户端 =(Web Services + RTSP)+ 客户端 = ((WSDL + SOAP) + RTSP) + 客户端
所以我们先来看看onvif开发中涉及到的一些技术框架

Web Services

Web Services是一种跨编程语言和跨操作系统平台的远程调用技术 ,可采用Http、SMTP等协议来在客户端和服务端之间传输数据。其中XML被用做数据描述的语法,SOAP用于消息传递,WSDL用来描述服务。
onvif是建立在Web Services标准上的,定义在onvif标准里的所有配置服务都表示为Web Services操作,并在WSDL中定义,使用HTTP作为通信机制。

WSDL

WSDL(Web Service Description Language),Web services 描述语言。用于描述Web服务和说明如何与Web服务通信的XML语言,为用户提供详细的接口说明书。
WSDL 文档是利用这些主要的元素来描述某个 web service 的:
: web service 执行的操作,可以把 元素比作传统编程语言中的一个函数库(或一个模块、或一个类)。
: web service 使用的消息,通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。message 用来定义每个soap服务的入参和出参,包括参数名,参数类型信息。(有点类似函数签名)。
: web service 使用的数据类型定义,为了最大程度的平台中立性,WSDL 使用 XML Schema 语法来定义数据类型。
: web service 使用的通信协议。

wsdl实例:


  

 

  

 

  
    
    
  

对比传统的编程,glossaryTerms 是一个函数库,而 "getTerm" 是带有输入参数 "getTermRequest" 和返回参数 getTermResponse 的一个函数。

上文提到的onvif的各个功能模块的接口都有相对应的WSDL文档进行描述,可以在ONVIF官网「Network Interface Specifications」中查阅:https://www.onvif.org/profiles/specifications/

SOAP

SOAP(Simple Object Access Protoco) 是一种基于 XML 的应用层协议,允许应用程序通过 HTTP、SMPT 来交换信息。
一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:

  • 必需的 Envelope 元素, Envelope 元素是 SOAP 消息的根元素,它可把 XML 文档定义为 SOAP 消息。
  • 可选的 Header 元素,包含头部信息,Header 元素可包含有关 SOAP 消息的应用程序专用信息(比如认证、支付等)。
  • 必需的 Body 元素, Body 元素可包含打算传送到消息最终端点的实际 SOAP 消息,包含所有的调用和响应信息。
  • 可选的 Fault 元素,提供有关在处理此消息所发生错误的信息。

SOAP 方法指的是遵守 SOAP 编码规则的 HTTP 请求/响应。
HTTP + XML = SOAP
SOAP 请求可能是 HTTP POST 或 HTTP GET 请求。
HTTP POST 请求规定至少两个 HTTP 头:Content-Type 和 Content-Length。

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250

使用WSDL+XML的模式使得onvif协议具有良好的扩展性。

4. onvif协议规范

image.png

onvif定制了一系列的协议规范profiles,profiles协议协议要求客户端和设备彼此必须支持一组功能:

  • Profile A:用于门禁控制配置,适用于电子门禁系统中使用的产品。
  • Profile C:用于门控和事件管理,适用于电子门禁系统中使用的产品。
  • Profile D – 候选版:用于访问控制周边设备,适用于周边设备的输入界面,例如令牌读取器(用于读取卡,钥匙,移动电话或条形码),生物识别读取器(用于指纹识别),相机(用于虹膜,面部或车牌识别),按键,传感器(用于识别锁状态,门状态,温度或动作)和部分输出设备(例如锁,显示器和LED)。
  • Profile G:用于存储和检索,专为基于IP的视频系统而设计,支持元数据的分析配置和信息查询,以及元数据的过滤和流式传输。
  • Profile Q: 用于快速安装,基于IP的视频系统,其目的是在网络上提供Profile Q一致产品(例如,网络摄像机,网络交换机,网络监视器)的快速发现和基本配置。
  • Profile S:用于基本视频流,专为基于IP的视频系统而设计。
  • Profile T:适用于高级视频流,专为基于IP的视频系统而设计。
    详情可见:https://www.onvif.org/ch/profiles/

5. onvif通讯原理

服务供应者(设备)负责提供Web Services(如各种onvif功能服务),这些服务通过WSDL进行描述,然后,服务请求(客户端)将WSDL文档将作为服务实现的基础。WSDL编译工具能通过WSDL文件生成与平台相关的代码,如可将WSDL文件转化为c/c++代码的gsoap。
服务端和客户端采用soap消息来进行数据通讯。对Web Services请求和应答都会以soap消息的形式进行传输。soap消息独立于任何的操作系统或协议,而且可以使用各种不同的网络传输协议进行传送(也就是说onvif协议是应用层协议)。onvif定义了一致的soap消息传输协议,用于描述Web Services。

基于Web Services的开发原理.png

上图对onvif基于Web Services开发的基本原理进行了一个概括。

6. 一般的onvif协议开发流程

  1. 获取所需要的wsdl;
  2. WSDL编译工具能通过WSDL文件生成与平台相关的代码;
  3. 封装实现客户端业务逻辑;

你可能感兴趣的:(onvif协议介绍)