一、音视频简介

由于人眼的特殊生理结构,当所见到的画面帧率高于每秒约 10-12 帧的时候,就会认为是连贯性的视频或动画效果,此现象被称之为视觉暂留。其中被用的最为广泛的是 30 FPS (流畅效果)。视频就是是利用人眼视觉暂留的原理,通过播放一系列连续的图片,使人眼产生运动的感觉。这里就引入了几个概念:

* 帧(Frame):视频每一张画面都是一帧。
* 帧率(FrameRate):即每秒显示帧数。

但是单纯传输视频画面,视频量非常大,对现有的网络和存储来说是不可接受的。为了能够使视频便于传输和存储,人们发现视频有大量重复的信息,如果将重复信息在发送端去掉,在接收端恢复出来,这样就大大减少了视频数据,同时也缓解了网络传输压力,因此有了H.264视频压缩标准。

在H.264压缩标准中I帧、P帧、B帧用于表示传输的视频中的某个画面。

* I帧:帧内编码帧,是一种自带全部信息的独立帧,无需参考其他图像便可独立进行解码,可以简单理解为一张静态画面。视频序列中的第一个帧始终都是I帧,因为它是关键帧。
* P帧:帧间预测编码帧,需要参考前面的I帧才能进行编码。表示的是当前帧画面与前一帧的差别。解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。与I帧相比,P帧通常占用更少的数据位,但不足是,由于P帧对前面的P和I参考帧有着复杂的依耐性,因此对传输错误非常敏感。
* B帧:又称双向预测编码帧,也就是B帧记录的是本帧与前后帧的差别。也就是说要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是对解码性能要求较高。

视频监控系统中预览的视频画面是实时的,对画面的流畅性要求较高。采用I帧、P帧进行视频传输可以提高网络的适应能力,且能降低解码成本所以现阶段的视频解码都只采用I帧和P帧进行传输。比如海康摄像机编码 I 帧间隔是50,含49个P帧。

二、音视频播放原理

img

解协议步骤

解协议主要时针对网络音视频传输的流媒体协议技术,如果播放本地文件则不需要解协议。

解协议的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的描述等。解协议的过程中会去除掉信令数据而只保留视音频数据。

例如RTMP协议传输的数据,经过解协议操作后,输出FLV格式的数据,即图中封装数据格式为 FLV。

解封装步骤

解封装的作用就是将封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。

封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。

音视频解码步骤

音视频解码是整个系统中最重要也是最复杂的一个环节,其作用就是将经过压缩编码后的音视频数据,解码成为非压缩的原始音视频数据。通过解码可以将视频数据输出为非压缩的颜色数据 YUV420P、RGB等等,将音频数据输出为非压缩的音频抽样数据 PCM 等等。

  • 常见音频压缩编码标准有:AAC、MP3、AC-3
  • 常见视频压缩编码标准有:H.264、H.265、MPEG2、VC-1

音视频同步步骤

音视频同步的作用,就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。顾名思义,它要求音频数据和视频数据播放同步进行。

三、开源工具

FFmpeg

FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。

FFmpeg有非常强大的功能包括:视频采集、视频格式转化、视频截图、视频添加水印、视频切片(m3u8、ts)、视频录制、视频推流、更改音视频参数(编码方式、分辨率、码率、比特率等)功能等等。

JavaCV

JavaCV 是一款基于JavaCPP 调用方式(JNI的一层封装),由多种开源计算机视觉库组成的包装库,封装了包含FFmpeg、OpenCV、tensorflow、caffe、tesseract、libdc1394、OpenKinect、videoInput和ARToolKitPlus等在内的计算机视觉领域的常用库和实用程序类。
并且 JavaCV 通过 JNI 使上述一系列组件库实现了跨平台,不需要再进行封装。

四、其他

ONVIF(开放型网络视频接口规范):为网络视频设备之间的信息交换定义通用协议,包括装置搜寻、实时视频、音频、元数据和控制信息等。

ONVIF中的设备管理和控制部分所定义的接口均以WebServices的形式提供。ONVIF规范涵盖了完全的XML及WSDL的定义。每一个支持ONVIF规范的终端设备均须提供与功能相应的Web Service。服务端与客户端的数据交互采用SOAP协议。

ONVIF中的其他部分比如音视频流则通过RTP/RTSP进行。