AVFoundation简介
AVFoundation是苹果OSX系统和iOS系统中用于处理基于时间的媒体数据的高级Objective-C框架。高度依赖多线程机制,充分利用了多核硬件的优势并大量使用block和GrandCentral Dispatch(GCD)机制将复杂的计算进程放在后台线程运行。会自动提供硬件加速操作,确保在大部分设备上应用程序能以最佳性能运行。充分考虑了电量效率来满足诸如iPhone和iPad这类移动设备对电量控制的高要求。
AVFoundation架构组成
Core Audio
Core Audio是OS X和iOS系统上处理所有音频事件的框架。Core Audio是由多个框架整合在一起的总称,为音频和MIDI内容的录制、播放和处理提供相应接口。Core Audio也提供高层级的接口,比如通过Audio Queue Services框架所提供的那些接口,主要处理基本的音频播放和录音相关功能。同时还会提供相对低层级的接口,尤其是Audio Units接口,它们提供了针对音频信号进行完全控制的功能,并通过Audio Units让你能够构建一些复杂的音频处理模式。
Core Video
Core Video是OS X和iOS系统上针对数字视频所提供的管道模式。Core Video为其相对的Core Media提供图片缓存和缓存池支持,提供了一个能够对数字视频逐帧访问的接口。该框架通过像素格式之间的转换并管理视频同步事项使得复杂的工作得到了有效简化。
Core Media
Core Media是AV Foundation所用到的低层级媒体管道的一部分。 它提供针对音频样本和视频帧处理所需的低层级数据类型和接口。Core Media还提供了AV Foundation用到的基于CMTime数据类型的时基模型。CMTime及其相关数据类型一般在AV Foundation处理基于时间的操作时使用。
Core Animation
合成及动画相关框架。主要功能就是提供苹果平台所具有的美观、流畅的动画效果。提供了一个简单、声明性的编程模式,并已经封装了支持OpenGL和OpenGL ES功能的基于Objective-C的各种类。使用Core Animation时,对于视频内容的播放和视频捕获这两个动作,AV Foundation提供了硬件加速机制来对整个流程进行优化。AV Foundation还可以利用Core Animation让开发者能够在视频编辑和播放过程中添加动画标题和图片效果。
AVFoundation处于高层级框架和低层级框架之间。提供了很多低层级框架才能实现的功能和性能,以更简单的Objective-C接口方式实现的。也可以和高层级的框架无缝衔接,比如MediaPlayer和Assets Library,使用这两个框架所提供的服务并在需要更高级的功能时,也可以直接与Core Media和Core Audio进行交互。
AVFoundation核心功能
音频播放和记录
AVAudioPlayer和AVAudioRecorder可以在应用程序中提供一种更简单的整合音频播放和记录的功能。并不是AV Foundation用于播放和记录音频的唯一方式。
媒体文件检查
可以查看这些媒体资源信息,比如是否可以回放、被编辑和导出。获取该媒体资源相关的技术参数,比如内容持续时间、创建日期或首选播放音量等。
该框架还基于AVMetadataltem类提供功能强大的元数据支持,允许开发者读写关于媒体资源的描述信息
视频播放
播放从本地文件或远程流中获取的视频资源,并对视频播放和内容的展示进行控制。
核心类:AVPlayer和AVPlayerItem。其他更高级的功能,如控制子标题和章节信息等。或者让你接连访问音频和视频这两个不同的资源。
媒体捕捉
核心类是AVCaptureSession,其作为所有活动的汇集点来接收摄像头设备由各路流发过来的电影和图片。
媒体编辑
允许创建可以将多个音频和视频资源进行组合的应用程序,允许修改和编辑独立的媒体片段、随时修改音频文件的参数以及添加动画标题和场景切换效果。
媒体处理
访问更底层的数据并对其进行操作。当需要执行更高级的媒体处理任务时,使用AVAssetReader和AVAssetWriter类来实现这些功能。这些类提供直接访问视频帧和音频样本的功能,所以可以对媒体资源进行任何更高级的处理。
数字媒体采样
将模拟信号转换成我们能够存储并传输的数字信号,要经过模拟-数字转换过程,我们将这个过程称为采样(Sampling)
数字媒体采样
媒体内容进行数字化主要两个方式
1.时间采样:这个方法是捕获一个信号周期内的变化
2.空间采样:一般用在图形数字化和其他可视化媒体内容数字化的过程中。
空间采样包含对一幅图片在一定分辨率之下捕捉其亮度和色度,进而创建由该图片像素点数据所构成的数字化结果。当对一段视频进行数字化时,这两种方式都可以使用,因为通常的视频信号既有空间属性又有时间属性。
音频采样
当我们记录一个声音时,比如诸如钢琴或吉他等乐器所发出的声音时,或捕捉其他环境的声音时,一般会使用麦克风设备,麦克风是将机械能量(声波)转化成电能量(电压信号)的转换设备。人类可以听到的音频范围是20Hz~20kHz(20 000Hz)。
数字媒体压缩
数字媒体压缩可以参看YUV和RGB
编解码器压缩
大部分音频和视频都是使用编解码器(codec)来压缩的。编解码器使用高级压缩算法对需要保存或发送的音频或视频数据进行压缩和编码,同时它还可以将压缩文件解码成适合播放和编辑的媒体资源文件。
编解码器既可以进行无损压缩也可以进行有损压缩。
无损压缩编解码器以一种可以完美重构解码的方式对媒体文件进行压缩,使其成为无论编辑还是发布都比较理想的文件。
有损编解码器就是在压缩过程中会有部分数据损失掉。
视频编解码器
AV Foundation提供有限的编解码器集合,只提供苹果公司认定的目前最主流的几种媒体类型的支持。具体对于视频文件来说,主要可以归结为H.264和Apple ProRes。
H.264
H.264规范是Motion Picture Experts Group(MPEG)所定义的MPEG-4的一部分。 H.264遵循早期的MEPG-1和MPEG-2标准,但是在以更低比特率得到更高图片质量方面有了长足进步,使其更好地用 于流媒体文件和移动设备及视频摄像头。
H.264与其他形式的MPEG压缩一样,通过以下两个维度缩小了视频文件的尺寸:
●空间:压缩独立视频帧,被称为帧内压缩。
●时间:通过以组为单位的视频帧压缩冗余数据,这一过程称为帧间压缩。
帧内压缩通过消除包含在每个独立视频帧内的色彩及结构中的冗余信息来进行压缩,因此可在不降低图片质量的情况下尽可能缩小尺寸。帧内压缩也可以作为有损压缩算法,但通常用于对原始图片的一部分进行处理以生成极高质量的照片。通过这一过程创建的帧称 为I-frames。
帧间压缩中,很多帧被组合在一起作为一组图片(简称GOP),对于GOP所存在的时间维度的冗余可以被消除。
GOP中的三个不同类型的帧。
●I-frames: 这些帧都是一些单独的帧或关键帧,包含创建完整图片需要的所有数据。每个GOP都正好有一个I-frames。 由于它是一个独立帧,其尺寸是最大的,但也是解压最快的。
●P-frames: P-frames又称为预测帧,是从基于最近I-frames或P-frames的可预测的图片进行编码得到的。P-frames 可以引用最近的预测P-frames或一组 I-frames。你将会经常看到这些被称为“reference frames"的帧,临近的P-frames和B-frames都可以对其进行引用。
●B-frames: B-frames 又称为双向帧,是基于使用之前和之后的帧信息进行编码后得到的帧。几乎不需要存储空间,但其解压过程会耗费较长时间,因为它依赖于周围其他的帧。
H.264还支持编码视图,用于确定在整个编码过程中所使用的算法。共定义了3个高级标准:
●Baseline:这个标准通常用于对移动设备的媒体内容进行处理,提供了最低效的压缩,因此经过这个标准压缩后的文件仍较大,但是同时这种方法也是最少计算强度的方法,因为它不支持B-frames。如果开发者的编译目标是年代比较久远的iOS设备,比如iPhone 3GS,可能需要用到Baseline标准。
●Main: 这个标准的计算强度要比Baseline的高,因为它使用的算法更多,但可以达到比较高的压缩率。
●High: 高标准的方法会得到最高质量的压缩效果,但它也是3种方法中计算复杂度最高的,因为所有能用到的编码技术和算法几乎都用到了。
AVSpeechSynthesizer
AVFoundation 文本播报