音视频原始文件
- 采集的音频原始文件为PCM格式。
- 采集的视频原始文件为YUV/RGB格式。
由于采集的原始的音视频文件数据量超大,不易于传输和存储,所以必须要对音视频文件进行编码压缩。
音视频编码
视频编码的主要作用是将视频像素数据(RGB,YUV等)压缩成为视频码流,从而降低视频的数据量。如果视频不经过压缩编码的话,体积通常是非常大的,一部电影可能就要上百G的空间。视频编码是视音频技术中最重要的技术之一。视频码流的数据量占了视音频总数据量的绝大部分。高效率的视频编码在同等的码率下,可以获得更高的视频质量。
A. 软编软解与硬编解码的概念
1. 软编软解: 利用CPU做视频的编码和解码; 占用CPU资源,编解码效率不高;
2. 硬编解码: 利用GPU或者专用处理器来对视频流进行编解码,也就是硬件编码和解码.在iOS 8.0后,
苹果将该Video/Audio ToolBox(之前在Mac系统中使用)框架引入iOS系统。
在此之前我们通常使用的FFmpeg多媒体库,利用CPU来进行视频的编解码,占用CPU资源,效率低下,俗称软编解码.而苹果在2014年的iOS8中,开放了VideoToolbox.framwork框架,此框架使用GPU或专用的处理器来进行编解码,俗称硬编解码.而此框架在此之前只有MAC OS系统中可以使用,在iOS作为私有框架.终于苹果在iOS8.0中得到开放引入.
B. 编码格式
音频编码格式:AAC
AAC(Advanced Audio Coding),中文名:高级音频编码,出现于1997年,基于MPEG-2的音频编码技术。由Fraunhofer IIS、杜比实验室、AT&T、Sony等公司共同开发,目的是取代MP3格式。2000年,MPEG-4标准出现后,AAC重新集成了其特性,加入了SBR技术和PS技术,为了区别于传统的MPEG-2 AAC又称为MPEG-4 AAC。视频编码格式:H264
H.264,同时也是MPEG-4第十部分,是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准。这个标准通常被称之为H.264/AVC(或者AVC/H.264或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC)而明确的说明它两方面的开发者。
视频封装格式
封装格式的主要作用是把编码压缩后的视频码流和音频码流按照一定的格式存储在一个文件中。现如今流行的封装格式如下表所示:
封装格式和编码格式的区别:
编码(codec),比如视频编码h264,h265,音频编码aac,mp3,它存在的目的主要是压缩原始数据的体积。封装格式(container),比如mp4,mkv,用来存储/传输编码数据,并按一定规则把音视频、字幕等数据组织起来,里面都会有一些信息,比如当前流中包含哪些编码类型,时间戳等,播放器可以按照这些信息来匹配解码器、同步音视频。
视频播放流程
视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤:解协议,解封装,解码视音频,视音频同步。如果播放本地文件则不需要解协议,为以下几个步骤:解封装,解码视音频,视音频同步。他们的过程如图所示。
流媒体协议是服务器与客户端之间通信遵循的规定。当前网络上主要的流媒体协议如表所示。
VideoToolbox的基本数据
Video Toolbox视频编解码前后需要应用的数据结构进行说明。
CVPixelBuffer:编码前和解码后的图像数据结构。此内容包含一系列的CVPixelBufferPool内容
CMBlockBuffer:编码后,结果图像的数据结构。
CMTime、CMClock和CMTimebase:时间戳相关。时间以64-bit/32-bit的形式出现。
pixelBufferAttributes:字典设置.可能包括Width/height、pixel format type、• Compatibility (e.g., OpenGL ES, Core Animation)
CMVideoFormatDescription:图像存储方式,编解码器等格式描述。
CMSampleBuffer:存放编解码前后的视频图像的容器数据结构。
音视频质量
开始中我们要了解几种影响音视频的质量的关键概念:
码流(也通常称码率、比特率)
指在单位时间传输或解码的位数(数据流量),是视频中画面质量控制的最重要部分。在分辨率相同的情况下,码流越大,压缩的比例就越小,画面质量越高,视频文件的体积也就越大.码流越大,说明单位时间内采样率越大,数据流和精度也越高,所以图像画面质量越好、越清晰,但要求设备的解码能力也越强;采样率(也称为采样速度或采样频率)
指每秒从连续的信号中提取并组成离散信号的采样个数,使用Hz(赫兹)来表示。 能够将模拟信号转换成数字信号时的采样频率,也就是单位时间内采样多少点。一个采样点数据有多少个比特。采集的数值越大,音视频的质量越好。比特率
指每秒传送的比特数,单位我bps(Bit Per Second),比特率越大,输送的数据也就越大,音质越好.视频中的比特率通常为码率。
比特率 =采样率 * 采用位数 *声道数.帧速度(帧率)
指每秒刷新图片的帧数(FPS),帧数越多,图像动作越流畅.分辨率
即为帧的大小.每一帧都是一副图像。一个音频编码率为128Kbps,视频编码率为800Kbps的文件,其总编码率为928Kbps,意思是经过编码后的数据每秒钟需要用928K比特来表示。
计算输出文件大小公式:
音频编码率(KBit为单位)/8 +视频编码率(KBit为单位)/8 *影片总长度(秒为单位)
=文件大小(MB为单位)
由此从上述概念可知:
码流、采样率、帧率值越大,视频和音频的质量和清晰度越大.分辨率影响图像大小,所以分辨率越高,图像越大,分辨率越低,图像越小。
因此,码率一定的情况下,分辨率越高,图像越不清晰.
但事实情况下,硬件设备也会影响,我们不能无限制的让这些参数变大,同时,码率一定的情况下,分辨率在一定的范围内取值图像都是清晰的;同样分辨率一定,码率在一定的范围内取值也都是清晰。