AVFoundation之前瞻
最近在学习AVfoundation,把学习过程记录下来。本篇是学习AVfoundation前需要了解的一些基本概念
1. 数字媒体
我们处在一个数字化的时代,但我们听到的音乐是通过模拟信号传递给我们的,但是我们还是更习惯模拟信息的世界。我们看到 的信号标志和所听到的音乐都是通过模拟信号传递给我们的,我们的眼睛和耳朵的构造将这 些信息转换为我们大脑能够解析出的电信号。现实生活中的信号是连续的,信号的频率和强 度是在不断变化的;但是数字世界的信号是离散的,由1和0两个状态表示。要将模拟信号转 换成我们能够存储并传输的数字信号,要经过模拟-数字转换过程,我们将这个过程称为采样(这个过程硬件已经帮我们做完了)
2. 为什么要压缩
对模拟信号进行数字化时,如果能够保留原始、未压缩的数字呈现效果,就是该媒体资源最纯粹的数字形式,但这样做需要大量的存储空间。比如一个44.1kHz、16位LPCM的音频文件 每分钟可能要占用10MB的空间。要数字化一个含12首歌的唱片,每首歌曲时间大概为5分钟 的话,共需要近600MB的存储空间。即使在当今的海量存储和高带宽的情况下,这个文件体 积仍然很大。所以我们可以看到不经过压缩的数字音频资源会占用大量的存储空间,但是未压缩的视频文件的情况是不是这样呢?下面了解一下组成数字视频文件的元素来判断能否满 足其对存储空间的需求。
2.1 视频文件的构成
视频文件由一系列称为“帧”的图片组成,在视频文件的时间轴线上每一帧都表示一个 场景。要创建连续的运动画面,我们需要在短时间间隔内提供特定数量的帧。视频文件一秒钟内所能展现的帧数称为视频的帧率,并用FPS作为单位进行测量。常见的帧率是24FPS、25FPS和30FPS。要知道未压缩的视频内容所需的存储空间,我们首先需要确定每一个独立的帧有多
大。我们知道有许多通用的视频尺寸,但是目前视频资源最流行的宽高比为16:9,意思是 每16个水平像素对应9个垂直像素。在这一宽高比之下最常见的视频尺寸是1280×720和 1920×1080。那么各自的像素情况是什么样的呢?如果对每个像素点使用8位的RGB色彩 空间,这就意味着红色占8位,绿色占8位,蓝色占8位。所有的输入收集好后,我们执行 一些计算。表1-1展示了对于未压缩视频在30FPS帧率的情况下,上述两个分辨率的存储空 间需求。
总结:说白了就是未压缩的视频文件太大,如下图
1-1.png3. 怎样压缩
3.1 色彩二次抽样
我们的眼睛对亮度的敏 感度要高于颜色,聪明的工程师们认识到,我们可以大幅减少存储在每个像素中的颜色信息进行压缩, 而不至于图片的质量严重受损。这个减少颜色数据的过程就称为色彩二次抽样。
3.2 编解码器压缩
大部分音频和视频都是使用编解码器(codec)来压缩的,编解码器这个术语是由编码器/ 解码器结合简写得来的(encoder/decoder)。编解码器使用高级压缩算法对需要保存或发送的音 频或视频数据进行压缩和编码,同时它还可以将压缩文件解码成适合播放和编辑的媒体资源 文件。编解码器既可以进行无损压缩也可以进行有损压缩,无损压缩编解码器比如我们最常用的zip和gzip。有损编解码器就是在压缩过程中会有部分数据损失掉。编解码器为这一形式的压缩使用基于人类可感知的高级压缩算法。比如即使人类可以理论上听见介于20Hz 和20kHz之间的声音,但我们可能真正敏感的频率区间是1kHz~5kHz。在了解这一原理后,我们知道在音频文件中可以利用过滤技 术来减少或消除特定频率。这只是众多方法中的一个,但有损压缩的目的是使用 psycho-acoustic或psycho-visual模式作为一种方法来减少媒体内容中的冗余数据,这样会使原 文件质量的损耗达到最小。
下面看一下由AV Foundation提供的编解码器支持。
3.3 视频编解码器
对于视频编解码而言,AV Foundation提供有限的编解码器集合,只提供苹果公司认定的 目前最主流的几种媒体类型的支持。具体对于视频文件来说,主要可以归结为H.264和Apple ProRes。下面开始学习H.264视频格式标准
- H.264
只要是H.264标准的文 件,AV Foundation都提供视频编解码器支持。这个标准广泛用于消费者视频摄像头捕捉到的资源并成为网页流媒体视频所使用的最 主要格式。H.264与其他形式的MPEG压缩一样,通过以下两个维度缩小了视频文件的尺寸:
● 空间:压缩独立视频帧,被称为帧内压缩。帧内压缩通过消除包含在每个独立视频帧内的色彩及结构中的冗余信息来进行压缩,因 此可在不降低图片质量的情况下尽可能缩小尺寸。这类压缩同JEPG压缩的原理类似。帧内压 缩也可以作为有损压缩算法,但通常用于对原始图片的一部分进行处理以生成极高质量的照 片。通过这一过程创建的帧称为I-frames。
● 时间:通过以组为单位的视频帧压缩冗余数据,这一过程称为 帧间压缩。在帧间压缩中,很多帧被组合在一起作为一组图片(简称GOP),对于GOP所存在的时间 维度的冗余可以被消除。如果想象视频文件中的典型场景,就会有一些特定运动元素的概念, 比如行驶的汽车或街上走路的行人,场景的背景环境通常是固定的。固定的背景环境就代表 一个时间维度上的冗余,这个冗余就可以通过压缩方式进行消除。 - Apple ProRes
AV Foundation支持Apple ProRes编解码器的两种不同风格。Apple ProRes被认为是一个中 间件或中间层编解码器,因为它的目的是为专业编辑和生产工作流服务。Apple ProRes编解 码器是独立于帧的,意味着只有I-frames可以被使用,这就使其更适合用在内容编辑上。此外, Apple ProRes还使用可变比特率编码的方式来对复杂场景中的每一帧进行编码。
ProRes是有损编解码器,但是它具有最高的编解码质量。Apple ProRes 422使用4:2:2的色 彩二次抽样和10位的采样深度。Apple ProRes 4444使用4:4:4色彩二次抽样,具有最终4个用于 表示支持无损alpha通道和高达12位的采样深度。
ProRes编解码器只在OS X上可用。如果开发者只针对iOS进行开发工作,只能使用H.264。 然而苹果公司提供了一种方法,即当我们捕捉图像的目的是对其进行编辑时,可以将目标变 换成通用的H.264编码格式,称为iFrame。对于编辑环境而言这是一个I-frames-only变量生成 H.264视频更合适的一种方法。这种格式在AV Foundation中是受支持的,并且它还被众多的 摄像头生产企业所支持,比如Canon、Panasonic和Nikon。
3.4 音频编解码器
只要是Core Audio框架支持的音频编解码,AV Foundation都可以支持,这意味着AV Foundation能够支持大量不同格式的资源。然而在不用线性PCM音频的情况下,更多的只能 使用AAC
。
高级音频编码(AAC)
是H.264标准相应的音频处理方式,目前已成为音频流和下载的音频 资源中最主流的编码方式。这种格式比MP3格式有着显著的提升,可以在低比特率的前提下 提供更高质量的音频,是在Web上发布和传播的音频格式中最为理想的。此外,AAC没有来 自证书和许可方面的限制,这一限制曾经在MP3格式上饱受诟病。
4. 容器格式
如果你和大家一样,喜欢在自己的电脑上查找不同类型的媒体文件,你可能会注意到以 各种扩展名结尾的文件,比如.mov、.m4v、.mpg和.m4a等。虽然我们通常将这些类型都认为 是文件格式,但其正确定义应该是这些类型都是文件的容器格式(container format)。
当开发者使用AV Foundation撰写代码时,将遇到两类主要的容器格式,它们分别是:QuickTime,MPEG-4