iOS 音视频开发之视频H264编码

189 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情

首先我们先了解视频的构成,视频是由图像、音频和元信息构成的。

  • 图像:视频内容本身就是一帧一帧的图片构成,人眼只要一秒钟连续播放16张以上的图片,就会认为这是一段连贯的视频,这种物理现象叫视觉暂留。
  • 音频:视频一定是由音频+图像内容构成的,所以音频在视频中是单独的一个部分,针对音频,我们是需要单独编码的。
  • 元信息:元信息其实就是描述信息的信息,用于描述信息的结构/语义/用途/用法等。比如视频元信息就包括了视频的具体信息,比如编码格式,分辨率等等。

视频中的编码格式分为视频的编码格式和音频的编码格式。在视频编码格式中,H264具有低码率、高质量的图像、容错能力强、网络适应性强的优势。H264最大的优势是具有很高的数据压缩比率,在同等图像质量下,H264的压缩比是MPEG-2的2倍以上,MPEG-4的1.5~2倍。。比如原始文件的大小如果为88GB,采用MPEG-2压缩标准压缩后变成3.5G,压缩比为25:1,而采用H264压缩标准后变为879MB,从88GB到879MB,H264的压缩比达到惊人的102:1。
在音频编码格式中,AAC是目前比较热门的有损压缩编码技术,并且衍生了LC_AAC,HE_AAC,HE_AAC v2三种主要编码技术。LC_AAC是比较传统的AAC,主要应用于中高码率的场景编码(>=80Kbit/s),HE_AAC主要应用于低码率场景的编码(<= 48Kbit/s)。AAC的优势在于在小于128Kbit/s的码率下表现优异,并且多用于视频中的音频编码。

将已经编码压缩好的视频数据和音频数据按照一定的格式放到一个文件中,这个文件可以成为容器也就是视频封装格式,当然通常情况下,我们不仅仅只存放音频数据和视频数据,还会存放一下视频同步的元数据,;例如字幕,虽然说多种的数据会用不同的程序来处理,但是它们在传输和存储的时候,这多种数据都是被绑定在一起的。常见的视频容器格式如下:

  • AVI:是当时为对抗quicktime格式(mov)而推出的,是能支持固定CBR恒定比特率编码的声音文锦啊
  • MOV:是QuickTime封装
  • WMV:微软推出的
  • mkv:万能封装器,有良好的兼容和跨平台性、纠错性,可带外挂字幕
  • flv:这种封装模式可以很好的保护原始地址,不容易被下载到,目前一些视频分享网站都采用这种封装方式
  • MP4:主要应用于mpeg4的封装,主要在手机上使用