关于 AV Foundation
AV Foundation 是苹果 OS X 系统和 iOS 系统中一个可以播放音频媒体、控制设备摄像头、处理音频和创建基于时间的视听媒体的框架。框架的构建考虑到了硬件环境和应用程序,其设计高度依赖多线程机制,其充分利用了多核硬件的优势并大量使用 Block 和 GCD 机制将复杂的计算进程放在后台线程运行,确保在大部分设备上应用程序以最佳性能运行。
AV Foundation 的适用范围
iOS 为开发者提供了一系列高层及和低层级的框架来实现时基媒体的各功能,AV Foundation 是其中之一。下图展示了 AV Foundation 在整个体系中所处的角色:

在 iOS 中,利用 UIKit 框架(UIImagePickerController
)可以很容易地将基本的静态图片和视频捕捉整合到应用程序中。此外,还提供了 AVKit 框架用于简化视频播放应用程序的创建过程,如果只是想播放视频,可以使用 AVKit 框架。虽然这些方法都很方便,但不够灵活,可自定义东西比较少。这时就需要基于 AV Foundation 框架来开发自定义功能。
处于高层级框架和低层级框架之间的就是 AV Foundation,其提供了很多低层级框架才能实现的功能和性能,并且是以 Objective-C 接口方式实现的。同时它也可以和高层级的框架无缝衔接,比如 Media Player 和 Assets Library, 也可以直接和 Core Media 和 Core Audio 进行交互。
AV Foundation 底层主要由 Core Audio 、 Core Media 和 Core Animation 框架支撑组成。其主要以C 接口为主,其中:
- Core Audio 是处理所有音频事件的框架,由多个框架整合在一起的总称,为音频的录制、播放和处理提供相应接口。
- Core Video 针对数字视频所提供的的管道模式,为 Core Media 提供图片缓存和缓存池支持,提供了一个能够对数字视频逐帧访问的接口。该框架通过像素格式之间的转换并管理视频同步事项使得复杂的工作得到了有效简化。
-
Core Media 提供针对音频样板和视频帧处理所需的低层级数据类型的接口。还提供了
CMTime
数据类型的时基模型。CMTime
及其相关数据类型一般在 AV Foundation 处理基于时基的操作时使用。 - Core Animation 是合成及动画相关框架,主要功能就是提供苹果平台所具有的美观、流程的动画效果。使用 Core Animation 时,对于视频内容的播放和视频捕获这两个动作,AV Foundation 提供了硬件加速机制对整个流程进行优化。还可以利用 Core Animation让开发者能够在视频编辑和播放过程中添加动画和贴纸效果。
AV Foundation 的核心功能
AV Foundation 结合了六个主要技术领域,涵盖了在 Apple 平台上捕获、处理、合成、控制、导入和导出视听媒体的任务,其分成了下面 6 个模块:
媒体资源
AV Foundation 框架用来表示媒体的主要类是 AVAsset
。AVAsset
是一个抽象类,不依赖于特定的数据格式,是其他资源类的父类,其定义了一个或多个媒体数据(音频和视频轨道)的集合的聚合表示,提供有关整个集合的信息,例如其标题、持续时间、自然呈现大小等。
Asset
中的每个媒体数据片段都是统一的类型,称为轨道(track)。AVAssetTrack
是媒体资产轨道的映射。在一个典型的简单情况下,一个轨道代表音频分量,另一个轨道代表视频分量;然而,在复杂的合成中,可能有多个重叠的音频和视频轨道。资产也可能有元数据。
AV Foundation 中的一个重要概念是,初始化资产或轨道并不一定意味着它已准备好使用。甚至可能需要一些时间来计算项目的持续时间(例如,MP3 文件可能不包含摘要信息)。不是在计算值时阻塞当前线程,而是通过使用 block
定义的回调来请求值并异步获取结果。
音频播放和记录
AVAudioPlayer
和 AVAudioRecorder
可以在应用程序中提供一种更简单的整合音频播放和记录的功能。这些方法并不是 AV Foundation 用于播放和记录音频的唯一方式,还可以使用配置应用程序的音频行为 AVAudioSession
。
视频播放
AV Foundation 提供的其中一个最常用的功能是视频播放功能,通过 AVPlayer 和 AVPlayerItem 可以让开发者播放本地文件或远程流中的视频资源,并对视频播放和内容的展示进行控制。此外它还可以整合其它更高级的功能,如控制子标题和章节信息等。
照片/视频捕捉
AV Foundation 提供了一个丰富的 API 集合让开发者可以对设备内置的摄像头进行精密控制。摄像头捕捉的核心类是 AVCaptureSession
,其作为所有活动的汇集点来接收摄像头设备由各路流发过来的电影和图片。
编辑音视频
AV Foundation 同样对媒体资源的整合和编辑提供了强有力的支持,允许创建可以将多个音频和视频资源进行组合的应用程序,允许修改和编辑独立的媒体片段。并且当需要执行更高级的媒体处理任务时,可以用 AVAssetReader
和 AVAssetWriter
类来实现这些功能。这些类提供直接访问视频帧和音频样本的功能。
声音合成
在 iOS 中可以使用 AVSpeechSynthesizer
类为程序添加文本转语言的声音合成功能。这个类用来播放一个或多个语音内容,这些内容都是 AVSpeechUtterance
类的实例。
网友评论