初识 AVFoundation 框架

初识 AVFoundation 框架

AVFoundation 的含义

  AVFoundation 是苹果 OS X 系统和 iOS 系统中用于处理基于时间的媒体数据的高级 Objective-C 框架。通过开发所需的工具提供了大量强大的功能集,让开发者能够基于苹果平台创建先进的媒体应用程序。其构建考虑到了目前的硬件环境和应用程序,设计过程高度依赖多线程机制。充分利用了多核硬件的优势并大量使用 block 和 GCD 机制将复杂的计算进程放在后台线程运行。自动提供硬件加速操作,确保在大部分设备上应用程序能以最佳性能运行。AVFoundation 的设计也充分考虑了电量效率来满足诸如 iPhone 和 iPad 这类移动设备对电量控制的高要求。此外。从一开始该框架就是针对 64 位处理器设计的,可以发挥 64 微处理器的所有优势。

AVFoundation 的适用范围

  Mac OS X 和 iOS 为开发者提供了一系列高层及和低层级的框架来实现时基媒体(timed media)的各功能。下图展示了 AVFoundation 在整个体系中所处的角色。
初识 AVFoundation 框架
  两个平台都针对处理媒体相关操作提供了一系列高层级的解决方案。在 iOS 中,利用 UIKit 框架可以很容易的将基本的静态图片和视频捕捉整合到应用程序中。Mac OS X 和 iOS 两个系统都可以通过在 WKWebView 或 UIWebView 中添加 <audio><video> H5 标签来播放音频和视频内容。此外两个系统还提供了 AVKit 框架,用于简化目前流行的视频播放应用程序的创建过程。所有这些方法使用起来都很方便且简单,但不够灵活,并且经常需要更高级的应用来对其进行控制。
  这些适用范围的另一端同样给出了一些低层级的框架。他们支持所有高层级方法所使用的的功能。大部分这些框架都是低层级、基于 C 应用程序框架且功能强大和高性能的。接下来了解几个最主要的支撑框架机器提供的功能。

Core Audio

  Core Audio 是 OS X 和 iOS 系统上处理所有音频事件的框架。Core Audio 是由多个框架整合在一起的总称,为音频和 MIDI 内容的录制、播放和处理提供相应接口。Core Audio 也提供高层级的接口,比如通过 Core Queue Services 框架所提供的那些借口,主要处理基本的音频播放和录音相关功能。同时还会提供相对低层级的接口,尤其是 Audio Units 接口,它们提供了针对音频信号进行完全控制的功能,并通过 Audio Units 让我们能够构建一些复杂的音频处理模式。

Core Video

  Core Video 是 OS X 和 iOS 系统上针对数字视频所提供的管道模式。Core Video 为其相对的 Core Media 提供图片缓存和缓存池支持,提供了一个能够对数字视频逐帧访问的接口。该框架通过像素格式之间的转换并管理视频同步事项是的复杂的工作得到了有效的简化。

Core Media

  Core Media 是 AVFoundation 所用到的低层级媒体管道的一部分。它提供针对音频样本和视频帧处理所需的低层级数据类型接口。Core Media 还提供了 AVFoundation 用到的基于 CMTime 数据类型的时基模型。CMTime 及其相关数据类型一般在 AVFoundation 处理基于时间的操作时使用。

Core Animation

  Core Animation 是 OS X 和 iOS 提供的合成及动画相关框架。主要功能就是提供苹果平台所具有的美观、流畅的动画效果。提供了一个简单、声明性的编程模式。并已经封装了支持 OpenGL he OpenGL ES 功能的基于 Objective-C的各种类。使用 Core Animation 时,对于视频内容的播放和视频捕获这两个动作,AVFoundation 提供了硬件加速机制来对整个流程进行优化。

  处于高层级和低层级框架之间的就是 AVFoundation。在整体媒体分类图中 AVFoundation 的地位举足轻重,起提供了很多低层级框架才能实现的功能和性能,并且是一更简单的 Objective-C 接口方式实现的。同时它也可以和高层级的框架无缝衔接,比如 Media Player 和 Assets Library,使用这两个框架所提供的服务并在需要更高级的功能时,也可以直接与 Core Media 和 Core Audio 进行交互。此外,由于 AVFoundation 处于 UIKit 和 APPKit 层之下,这也意味着可以在两个平台下使用这个媒体框架,降低了学习成本。