ONVIF网络摄像头(IPC)客户端开发—ONVIF介绍
1.前言:
网上已经有很多关于ONVIF开发的资料,这里概括介绍一下ONVIF协议以及介绍一下我自己在开发ONVIF网络摄像头的一些流程和经验,做个开发记录和经验总结,以备将来查看,也可供他人参考。如有错误,欢迎你的留言纠正,让我们共同成长。系列博客包括:
《ONVIF网络摄像头(IPC)客户端开发—ONVIF介绍》
《ONVIF网络摄像头(IPC)客户端开发—最简RTSP客户端实现》
《ONVIF网络摄像头(IPC)客户端开发—RTSP RTCP RTP加载H264视频流》
《ONVIF网络摄像头(IPC)客户端开发—RTSP RTCP RTP加载AAC音频流》
2.ONVIF:
ONVIF(Open Network Video Interface Forum,开放型网络视频接口论坛)以公开、开放的原则共同制定开放性行业标准。更多信息可以参考官方网站: Home - ONVIF Mandarin 。ONVIF标准的厂商覆盖芯片、视频前端设备、存储设备、系统平台、智能分析设备、门禁、传感设备等各个安防相关领域,IPC摄像头只是ONVIF标准里的一个分支而已。
3.技术框架:
ONVIF规范中设备管理和控制部分所定义的接口均以Web Services的形式提供。每一个支持ONVIF规范的终端设备均须提供与功能相应的Web Service。ONVIF中的其他部分比如音视频流则通过RTP/RTSP进行。
在ONVIF网络摄像头开发中,也就是包括了Web Server 和RTSP这两大部分,这两大部分的依赖不是非常大,在嵌入式设备中,可能没有足够的硬件资源来运行第三方多媒体处理库,比如FFmpeg,这时需要自己来封装RTSP流媒体传输协议。可以先从Web Server 中获取到了RTSP的URL之后,然后再通过这个URL来开发RTSP,这样可以去除对Web Server的依赖,简化程序的开发。
Web Server:
- 获取IPC的基本信息(厂家信息、版本信息等);
- 修改IPC的系统日期、时间;
- 修改IPC的网络配置(IP、子网掩码等);
- 获取/修改IPC摄像头的各种参数(视频分辨率、码率、帧率、OSD,云台控制等);
RTSP:
- RTSP启动、停止音视频流等
- RTP接收音视频流数据等
- RTCP汇报RTP传输情况等
3.1Web Server
Web Services,它即是一种网络服务。当你的系统完成一个通用的功能以后,如果你想让别人使用你的功能的话,那么你就可以发布成为Web Services服务,别人就可以通过网络远程调用到你的服务接口。它能够让各个系统之间的对接变得:快捷、方便、廉价。
实现Web Services常用的框架有:REST、SOAP、JavaScript、XML-PRC等,我们这里使用的SOAP框架。
3.1.1SOAP
SOAP(Simple Object Access Protoco,简单对象访问协议),是TCP/IP协议体系中的一个应用层协议,它是在HTTP基础之上实现的。
SOAP协议 = RPC机制 + HTTP传输协议 + XML数据格式
SOAP的两个主要设计目标是「简单性」和「可扩展性」,SOAP的设计正是围绕这两点展开的,这是它的优点:
- SOAP使用RPC机制,体现了「简单性」。让客户端调用Web Service的接口看起来像本地调用一样,确实很简单。
- SOAP 使用 HTTP 传送 XML,体现了「可扩展性」。尽管HTTP 不是有效率的通讯协议,而且 XML 还需要额外的文件解析(parse),两者使得交易的速度大大低于其它方案。但是XML 是一个开放、健全、有语义的讯息机制,而 HTTP 成熟、稳定、又能避免许多关于防火墙的问题,从而使SOAP得到了广泛的应用。
使用ONVIF的缺点有:
- HTTP是短连接的,都是客户端请求,服务端应答,这种模式导致服务端无法实时推送数据给客户端,只有像Socket那样的长连接才能保证实时通讯。
- HTTP有包头,而且XML全部用文本文件来传输数据,效率会比较低,如果你对流量、传输效率要求极高,那么你应该多考虑其它的方式,而不要用 SOAP。
3.2RTSP
RTSP(Real-Time Stream Protocol )是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP协议与HTTP协议类似,它们同样属于应用层。
- RTSP被用于建立的控制媒体流的传输,它为多媒体服务扮演“网络远程控制”的角色。RTSP本身并不用于传送媒体流数据。媒体数据的传送可通过RTP/RTCP等协议来完成。RTP和RTCP协议是基于TCP和UDP协议的基础上的一种协议,它们同样属于传输层的协议。
RTP是实时传输协议(Real-Time Transport Protocol)的缩写。是针对多媒体数据流的实时传输协议。通常建立在UDP协议之上,也可以建立在TCP协议之上。有人将其归为应用层协议,也有人将其归为传输层协议,这都是可以的。 - RTCP是实时控制协议(Real-Time Control Protocol)的缩写。RTCP通常与RTP配合使用,用以管理传输质量在当前进程之间的交换信息。在RTP会话期间,各参与者周期性的传送RTCP包,RTCP包中包含已发送数据包的数量、丢失的数据包的数量等统计资料。服务器可以利用这些信息动态的改变传输速率,甚至改变有效载荷的类型。RTP和RTCP配合使用,可以有效且以最小的开销达到最佳传输效率,非常适合传送实时流。
- 用一句简单的话总结:RTSP发起/终结流媒体、RTP传输流媒体数据 、RTCP对RTP进行控制,同步。
致谢:
- 许振坪 对ONVIF中Web Server端的开发有非常详细的介绍 [https://blog.csdn.net/benkaoya/article/details/72424335]
![](https://img2023.cnblogs.com/blog/555985/202212/555985-20221229171054114-894213487.jpg)