000- AVFoundation
[toc]
前言
AVFoundation
是可以用它来播放和创建基于时间的视听媒体的几个框架之一,它提供了基于时间的视听数据的详细界别上的OC
接口。可以用它来检查、创建、编辑、重新编码媒体文件。也可以从设备得到输入流和实时捕捉回放过程中操控视频.
用于处理基于时间的媒体数据的高级OC框架。充分利用了多核硬件的优势并大量使用block
和Grand Central Dispatch(GCD)
机制将复杂的计算进程放在后台线程运行。自动提供硬件加速操作,确保在大部分设备上应用程序能以最佳性能运行
。
适用范围
e025720d0d37caef2ea21dda864060136ac2dac24f066261b60da352de74b9b3
AV Foundation的几个最主要的支撑框架及其提供的功能
- Core Audio
OSX
和iOS
上处理所有音频事件的框架,是由多个框架整合在一起的总称。为音频和MIDI内容的录制、播放和处理提供相应接口,也提供高层级的接口,比容通过Audio Queue Services框架
所提供的那些接口,主要处理基本的音频播放和录音相关功能。也提供相对低层级的接口。
- Core Video
低层级媒体管道的一部分,它提供折痕对音频样本和视频帧处理所需的低层级数据类型和接口。还提供了
AV
用到的基于CMTime数据
类型的时基模型。CMTime
及其相关数据类型一般在AV处理基于时间的操作时使用
- Core Animation
合成及动画相关框架。主要功能是提供苹果平台所具有的美观、流畅的动画效果。提供一个简单、声明性编程模式,并已经封装了支持
OpenGL
和OpenGL ES
功能的基于OC
的各种累。使用Core Animation
时,对于视频内容的播放和视频不捕捉这两个动作?AV还可以利用Core Animation
在视频编辑和播放过程中添加动画标题和图片效果
AV处于高层级框架
和低层级框架之间
,提供了很多低层级框架才能实现的功能和性能,并且是以更简单的OC接口方式实现,同时也可以和高层级框架无缝连接。
AV功能分解
-
音频播放和记录。播放音频文件可以使用
AVAudioPlayer
,录制音频文件可以使用AVAudioRecorder
。还可以使用AVAudioSession
来配置应用程序的音频行为。 -
媒体文件检查。提供检查正在使用的媒体文件的功能。可以查看媒体资源信息,比如是否可以回放、编辑、导出等,可以获取相关技术参数,比如内容持续时间,创建日期、播放音量等,此外还基于
AVMetadataItem
类提供功能强大的元数据支持。允许开发者读取关于媒体资源的描述信息 -
视频播放。
AV
提供可以播放从本地或者远程流中获取的视频资源,并对视频播放和内容的展示进行控制。核心类是AVPlayer
和AVPlayerItem
,此外还可以整合其他更高级的功能,如控制子标题和章节信息等。 -
媒体捕捉。核心类是
AVCaptureSession
,作为所有活动的汇集点来接受摄像头设备由各路流反过来的电影和图片。是用来管理数据捕捉的中央协调对象,使用一个实例来协调从AV
输入设备到输出的数据流。 -
媒体编辑。对媒体资源的整合和编辑提供了强有力的支持。允许修改和编辑独立的媒体片段、随时修改
音频文件
的参数以及添加动画标题和场景切换效果。 -
媒体处理。当需要执行更高级的媒体处理任务是,可以用
AVAssetReader
和AVAssetWriter
类来实现这些功能。这些类提供了直接访问视频帧和音频样本的功能,可以对媒体资源进行任何更高级的处理。
了解数字媒体
-
视频文件一秒内所能展现的帧数成为视频的帧率,用
FPS
作为单位进行测量。常见的帧率是24FPS、25FPS、30FPS
。 -
目前视频最流行的宽高比是
16:9
,意思是每16个水平像素对应9
个垂直像素。常见视频尺寸为1280*720
,1920*1080
。 -
如果每个像素点使用
8
位RGB色彩空间,这意味着红色8
位,绿色8
位,蓝色8
位。 -
现在问题来了,一个帧率为
30FPS
,分辨率是1920*1080
的视频存储需求就是:1920*1080 * 30 * 24 (b/s)
数字媒体压缩
为缩小数字媒体文件大小,需要对齐使用压缩技术。
色彩二次抽样
视频数据是使用
YCbCr
颜色模式的典型案例,也常称为YUV
。
对
RGB
模式来说,每个像素是由红、绿、蓝三种颜色组合而成,而YUV
使用的是色彩通道UV(颜色)
替换了像素的亮度通道Y(亮度)
。眼睛对于亮度的敏感度要高于颜色,所以可以大幅度减少存储在每个像素中的颜色信息,不至于是图片质量严重受损,减少颜色数据的过程就成为色彩二次抽样。
编解码器压缩
大部分音频和视频都是使用编解码器
(codec)
来压缩的,即编码器和解码器(encoder/decoder)
。编解码器使用高级压缩算法对需要保存或发送的音频或视频数据进行压缩和编码,同时还可以将压缩文件解码成为适合播放和编辑的媒体资源。编解码器可以进行无损压缩也可以机型有损压缩
视频编解码器
对于视频编辑码而言,
AV提供
有限的编解码器集合,只提供苹果公司认定的最主流的几种媒体类型的支持。对视频文件主要可以归结为H.264
和Apple ProRes
。
H.264
H.264
规范是Motion Picture Experts Group(MPEG)
所定义的MPEG-4的一部分,H.264
遵循早期的MPEG-1
和MPEG-2
标准,但在以更低比特率得到更高图片质量方面有了长足进步,使其更好地使用与流媒体文件和移动设备及视频摄像头。
H.264
与其他形式的MPEG
压缩一样,通过以下两个纬度缩小了视频文件的大小:
- 空间:压缩独立视频帧,称为帧内压缩
- 时间:通过以组为单位的视频帧压缩冗余数据,称为帧间压缩
帧内压缩
,通过消除包含在每个独立视频帧内的色彩及结构中的冗余信息来进行压缩,因此可在不降低图片质量的情况小尽可能缩小尺寸。这类压缩类似JEPG压缩
,帧内压缩可以作为有损压缩算法
,通常用于对原始图片的一部分进行处理以生成极高质量的照片,通过这一过程创建的帧成为I-frames
。
帧间压缩
,很多帧被组合在一起成为一组图片(简称GOP
),对于GOP
所存在的时间维度的冗余可以被消除。在一个时间维度上的冗余,如视频的固定背景环境,就可以通过压缩的方式进行消除。
GOP中三种不同的帧:
-
I-frames
:关键帧
,或者单独的帧,包含创建完整图片所需要的所有数据,每个GOP
都正好有一个I-Frames
。由于它是一个独立帧,其尺寸是最大的,但也是压缩最快的。 -
P-frames
:预测帧
,是从基于最近I-frames
或P-frames
的可预测的图片进行编码得到的。P-frames
可以引用最近的预测帧P-frames
或一组I-frames
。你将会经常看到被称为“Reference frames
”的帧,临近的P-frames
和B-Frames
都可以对其进行引用。 -
B-frames
:双向帧
,基于使用之前和之后的帧信息进行编码后得到的帧。几乎不需要存储空间,但其解码过程会耗费很长时间,因为它依赖于周围其他的帧。
H.264
还支持编码视图
,用于确定在整个编码过程中所使用的算法定义三个高级标准:
-
Baseline
:通常用于对移动设备的媒体内容进行处理,提供最低效的压缩,因此经过这个标准压缩后的文件仍较大,但同时这种方法也是最少计算强度的方法,因为它不支持B-frames
。如果编译目标是比较久远的iOS设备
,可能需要用到Baseline
标准。 -
Main
:这个标准的计算强度比Baseline
的高,使用的算法更多,但可以达到较高的压缩率 -
High
:高标准的方法会得到最高质量的压缩效果,但它也是三总方法中计算复杂度最高的,因为所有能用到的编码技术和算法几乎都用到了.
Apple ProRes
ProRes
编解码器只在OSX
上使用,针对iOS
进行开发,只能使用H.264
对
H.264
和Apple ProRes
来说,AV还支持很多摄像头设备的编解码器,如MPEG-1、MPEG-2、MPEG-4、H.263
和DV
,允许用户以多种不同的视频捕捉设备导入内容资源。
音频编解码器
只要是
Core Audio
框架支持的音频编解码,AV
都可以支持。意味着AV
可以支持大量不同格式的资源,然而在不适用线性PCM音频
的情况下,更多的只能使用AAC
。
AAC,高级音频编码是
H.264
标准相应的音频处理方式,目前已成为音频流和下载的音频资源中最主流的编码方式。这种格式比MP3
格式有显著的提升,可以在低比特率的前提下提供更高质量的音频,在web上
发布和传播的音频格式中最为理想的。AAC
没有来自证书和许可方面的限制。
AV
和Core Audio
提供对MP3
数据解码的支持,但不支持对齐进行编码。
容器格式
容器格式(
container fromat
)就是文件类型,或者说文件格式,比如.mov、.mp4、.mpg、avi
等。
容器格式被认为是元文件格式,可以将容器格式视为包含一种或者更多种媒体类型(以及描述其内容的元数据)的目录
每种格式都有一个规范用于
确定文件
的机构,所谓的结构并不仅是其包含的媒体资源技术领域的问题,比如媒体的周期
、编码
和时间信息
,还定义了默哀属性还原数据
,比如电影标题或一首歌的作者信息等。这些元数据
可以通过工具进行呈现。
使用AV是,将遇到两种主要的容器格式:
-
QuickTime
,是苹果公式在更宏观QuickTime
架构中定义的最常用格式。需阅读文档了解。 -
MPEG-4
,MP4
容器格式官方文件扩展名是.mp4,也有很多不同的变化扩展名也在使用。