AV Foundation 是 OSX 系统和 iOS 系统中用于处理基于时间的媒体数据的高级 objectivec 框架,其设计过程高度依赖多线程机制,充分利用了多核硬件优势,大量使用 Block 和 GCD 机制。AVFoundation 能与高层级框架无缝衔接,也能提供低层级框架的功能和性能。
1. AVFoundation 核心功能
AVFoundation 提供的核心功能如下所示
- 音频播放和记录——AVAudioPlayer 和 AVAudioRecorder
- 媒体文件检查——AVMetadataItem
- 视频播放——AVPalyer 和 AVPlayerItem
- 媒体捕捉——AVCaptureSession
- 媒体编辑
- 媒体处理——AVAssetReader、AVAssetWriter
2. 数字媒体
2.1 数字媒体采样
将现实世界的模拟信号转换为能够被计算机存储和传输的数字信号,需要经过模拟-数字转换过程,也称为采样。数字化采样有两种方式,一种是时间采样,即捕捉一个信号周期内的变化,一种是空间采样,一般用于图片数字化和其他可视化媒体内容数字化上,它对一个图片在一定分辨率下捕捉其亮度和色度,进而创建出由该图片的像素点数据所构成的数字化结果。视频既有空间属性又有时间属性,所以数字化时都可以使用。
2.2 音频采样
对于一个音频,麦克风负责将物理振动转化为相同频率和振幅的电流信号,之后通过线性脉冲编码调制(LPCM)进行编码。LPCM 采样或测量一个固定的音频信号,其周期率被称为采样率。采样频率达到奈奎斯特频率(采样对象最高频率的 2 倍)时即可准确表现原始信号的信息。另一方面编码字节数(也称位元深度)表现了采样精度,如位元深度为 8 位的编码能够提供 256 个离散级别的数据,CD 音质位元深度为 16。
3. 数字媒体压缩
原始、未压缩的数字化媒体数据需要大量的存储空间,因此需要进行压缩。
3.1 色彩二次抽样
由于人类的眼睛对亮度的敏感度高于颜色的敏感度,因此可以大幅降低存储在每个像素中的颜色信息,而不至于图片质量严重受损,这一过程称为色彩二次采样。
视频数据都使用 YCbCr 颜色模式,也称为 YUV 模式,与 RGB 视频信号传输相比,它最大的优点在于只需占用极少的频宽。其中 “Y” 表示明亮度(Luminance或Luma),也就是灰阶值;而 “U” 和 “V” 表示的则是色度。
色彩二次抽样通常用一个三分比值表示,J:a:b(例如4:2:2),形容一个以J个像素宽及两个像素高的概念上区域:
J:水平抽样参照(概念上区域的宽度)。通常为4
a:在J个像素第一行中的色度抽样数目(Cr, Cb)
b:在J个像素第二行中的额外色度抽样数目(Cr, Cb)
下面是抽样示意图
4:4:4 比例下全彩色信息都可被保存,在 4:2:2 比例下色彩信息为每两个水平像素的平均值,在 4:2:0 比例下色彩信息为水平和垂直 4 个像素的平均值。
3.2 编解码器压缩
编解码器使用高级压缩算法对需要保存或发送的音频或视频数据进行压缩和编码,同时可以将压缩文件解码成适合播放和编辑的媒体资源文件。编解码器分无损压缩和有损压缩,zip 和 gzip 就是无损压缩。
3.3 视频编解码器
AVFoundation 只提供 H.264 和 Apple ProRes 两种媒体类型的支持,但 iOS 只支持 H.264。
3.3.1 H.264
H.264 规范是 Motion Picture Experts Group(MPEG)定义的 PMEG-4 的一部分,与其他 MPEG 压缩一样,H.264 通过下面两个维度来压缩视频文件尺寸:
- 空间:压缩独立视频帧,被称为帧内压缩
- 时间:以组为单位压缩视频帧冗余数据,称为帧间压缩
帧内压缩通过消除包含在每个独立视频帧内的色彩及结构中的冗余信息来进行压缩,因此可以在不降低图片质量情况下尽可能缩小尺寸,这一过程创建的帧称为 I-frames。
帧间压缩将很多帧组合为一组图片(简称 GOP),对于 GOP 所存在的时间维度的冗余可以被消除。GOP 存储三种不同类型的帧:
- I-frames:关键帧,创建完整图片所需要的所有数据,尺寸大但解压快
- P-frames:预测帧,基于最近的 I-frames 或 P-frames 的可预测图片进行编码得到
- B-frames:双向帧,基于使用之前和之后的帧信息编码得到的帧,解压过程费时
3.4 音频解码器
AVFoundation 广泛使用 AAC(高级音频编码) 作为音频解码器,它是 H.264 标准相应的音频处理方式,优于 MP3 格式。