1. ONVIF简介

网络摄像头的标准协议中, 国际标准上有三大类 : ONVIF , PSIA , HDCCTV
国内标准有 国标GB/T28181
ONVIF, 与PSIA,HDCCTV相比,无论是厂商支持度, 厂商知名度, 还是市场占有率都领先

技术框架

ONVIF规范中设备管理和控制部分所定义的接口均以Web Services的形式提供
ONVIF规范涵盖了完全的XMLWSDL的定义
每一个支持ONVIF规范的终端设备均须提供与功能相应的Web Service
服务端与客户端的数据交互采用SOAP协议
ONVIF中的其他部分比如音视频流则通过RTP/RTSP进行传输
比如 在IPC网络摄像头中 , IPC是Web Services服务端, 其提供的服务接口需符合ONVIF协议规范(这些接口定义在ONVIF规定的WSDL文档中)
开发的客户端通过这些ONVIF规范接口跟IPC通讯 , 下面几条常见的功能:

  1. 获取IPC的基本信息(厂家信息、版本信息等)
  2. 修改IPC的系统日期、时间
  3. 修改IPC的网络配置(IP、子网掩码等)
  4. 获取/修改IPC摄像头的各种参数(视频分辨率、码率、帧率、OSD , 云台控制等)
    由于SOAP协议不适合传输音视频流, ONVIF规范中的传输音视频流采用的是已经很成熟的RTP/RTSP多媒体传输协议
    简单的理解: IPC的各种参数获取/配置都是通过ONVIF协议实现 , 而音视频流传输采用的是RTP/RTSP协议实现

技术规格

ONVIF协议中有一系列Profile的技术规格
ONVIF之所以引入了Profile的概念, 使得终端用户能够更容易区分各个Profile所支持的特性 , 而无需确定ONVIF技术规格不同版本间的兼容性
截止目前 , 已经发布维护者中的Profile包括Profile A/C/D/G/M/S/T 7种

onvif官方profile地址:https://www.onvif.org/ch/profiles/

  • Profile A:用于门禁控制配置
  • Profile C:用于门控和事件管理
  • Profile D:用于访问控制外设
  • Profile G:用于存储和检索
  • Profile M:用于分析类应用程序的元数据和事件
  • Profile S:用于基本视频流
  • Profile T:适用于高级视频流
  • Profile Q 于2022年4月1日起已弃用

IPC摄像头有关的主要是Profile S技术规格

2. ONVIF 实现原理

ONVIF规范向视频监控引入了Web Service的概念
设备的实际功能均被抽象为了Web Service的服务, 视频监控系统的控制单元以客户端的身份出现, 通过Web请求的形式完成控制操作

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

Web Service是基于网络的, 分布式的模块化组件, 执行特定的任务
Web Service 主要利用HTTP 和 XML/SOAP协议使数据在Web上传输
Web用户能够基于HTTP通过 Web 调用的方法来调用远程对象

Web Service是基于XML和HTTP的一种服务, 其通信协议主要基于SOAP服务端和客户端以传递符合XML/SOAP消息实现服务的请求与回应
客户端根据 WSDL 描述文档, 会生成一个 SOAP 请求消息, 该请求会被嵌入在一个HTTP /POST请求中 发送到Web Services所在的Web服务器
Web Services 请求处理器解析收到的SOAP请求, 调用相应的 Web Services 然后再生成相应的 SOAP 应答
Web服务器得到SOAP 应答后, 会再通过 HTTP应答的方式把信息送回到客户端

Web Services 需要实现的ONVIF规范服务

  • DeviceMgmt(设备管理)
  • DeviceIO(设备IO服务)
  • Event(事件处理)
  • Analytics(视频分析)
  • AnalyticsDevice(分析设备)
  • Display(显示服务)
  • Imaging(图像配置)
  • Media(媒体配置)
  • PTZ(PTZ控制)
  • Receiver(接收端配置)
  • RemoteDiscovery(设备发现)
  • Recording(录像控制)
  • Replay(重放控制)
  • Search(记录搜索)

除了「RemoteDiscovery」模块之外,每个模块都有各自的「服务地址」,客户端要使用这些模块接口之前,必须先知道对应模块的「服务地址」

客户端需要了解哪个能力的具体服务, 则搜索对应的wsdl即可
比如变焦zoom属于PTZ能力的一部分, 则直接搜索ptz.wsdl, 而聚焦focus属于Imaging能力的一部分, 则搜索imaging.wsdl

onvif官方wsdl地址 : https://www.onvif.org/profiles/specifications/

XML/SOAP协议
SOAP(Simple Object Access Protocol) 是基于XML的一种协议
一条 SOAP 消息就是一个普通的 XML 文档, 包含下列元素:

必需的 Envelope 元素, 可把此 XML 文档标识为一条 SOAP 消息
可选的 Header 元素, 包含头部信息
必需的 Body 元素, 包含所有的调用和响应信息
可选的 Fault 元素, 提供有关在处理此消息所发生错误的信息

ps: 在向Web Service发送的SOAP请求中, Body元素中的字段需与WSDL中数据类型的相符合
在构建SOAP的过程中, 必须从WSDL文件中获取并映射这一种对应关系
然而这样一个对应过程将是充满了重复性和机械性 基于此原因, 会引出gSOAP

3. IP多播

IP多播(multicast)也叫做组播,任播
多播技术必不可少, 在日常生活中, 视频聊天, 多人协作文件等都起着重要的作用

单播(unicast): 客户端与服务器之间的点对点连接
广播(boradcast): 主机之间一对所有的通信模式, 广播可以向局域网中所有主机发送信息, 广播禁止在Internet网上传输(广播风暴)
多播(multicast): 主机之间一对一组的通信模式, 也就是加入了同一个组的主机可以接受到组内的所有数据

需要注意的是: 广播和多播数据都是基于UDP进行传输
IP多播的重点是解决如何高效的把同一个数据包尽可能发送到多个不同的设备
TCP只能实现单播类型的通信。

IP多播的传输原理
多播报文的目的地址使用D类IP地址, 但D类IP地址不能出现在多播报文的源IP地址字段
单播数据传输过程中, 一个数据包传输的路径是从源IP地址路由到目的IP地址, 利用逐跳的原理在IP网络中传输
然而在多播传输中, 数据包的目的地址不是一个, 而是一组, 形成多播地址
所有的信息接收者都加入到同一个组内, 并且一旦加入之后, 流向多播地址的数据立即开始向接收者传输, 组中的所有成员都能接收到数据包
多播中的组员都是动态的, 主机可以在任何时刻加入或离开多播组
一台主机可以同时属于多个多播组, 此外不属于某一个多播组的主机也可以向多播组发送数据包。

ONVIF搜索设备

设备搜索原理:
ONVIF协议要求支持ONVIF协议服务的设备, 需要提供设备发现以及探测功能, 也就是discoveryprobe
当ONVIF客户端向同一网段内的多播地址239.255.255.250, 端口3702发送多播消息
接收到消息的ONVIF服务会返回自己的IP, UUID, DeviceServiceAddress, 而DeviceServiceAddress就是设备提供ONVIF服务的地址

设备搜索实现:
ONVIF客户端首先发起ws-discovery, 查找同一网段内的所有设备, 设备在接收到ws-discovery之后进行响应
(1)创建组播用的udp socket
(2)socket加入多播组239.255.255.250, 端口3702
(3)socket发送搜索数据, Probe类型的数据探测包