由于本人工作的公司经营不下去了,所以本人现在处于待业状态,正好有时间充充电,翻译一下苹果的官方文档,参考工具是dash
AVFoundation是iOS的几个框架之一,您可以用来播放和创建基于时间的视听媒体。 它提供了一个Objective-C接口,用于在详细级别上处理基于时间的视听数据。 例如,您可以使用它来检查,创建,编辑或重新编码媒体文件。 您还可以从设备获取输入流,并在实时捕获和播放过程中操作视频。
我们通常应该使用可用的最高级别的抽象,来执行所需的任务。
- 如果你只想播放电影,使用AVKit框架。
- 在iOS上,当您只需要对格式的最小控制时记录视频,请使用UIKit框架(UIImagePickerController)。
AVFoundation框架有两个方面 - 与仅与音频相关的视频和API相关的API。 较旧的音频相关类提供了处理音频的简单方法。 它们在Multimedia Programming Guide
中有所描述,不在本文档中。
- 要播放声音文件,您可以使用AVAudioPlayer。
- 要录制音频,您可以使用AVAudioRecorder。
您还可以使用AVAudioSession配置应用程序的音频行为; 这在Audio Session Programming Guide
中描述。
用AVFoundation表示和使用媒体
AV Foundation框架用来表示媒体的主要类是AVAsset。框架的设计主要由这种表示法指导。了解其结构将帮助您了解框架的工作原理。 AVAsset实例是一个或多个媒体数据(音频和视频轨道)的集合的聚合表示。它提供关于作为整体的集合的信息,例如其标题,持续时间,自然呈现大小等。 AVAsset不绑定到特定的数据格式。 AVAsset是用于通过URL(参见Using Assets
源)和媒体创建asset实例并创建新合成的其他类的超类(请参阅Editing
)。
Asset中的各个媒体数据片段是统一类型并称为轨道。在典型的简单情况下,一个轨道表示音频分量,另一个轨道表示视频分量;然而,在复杂的构成中,可能存在音频和视频的多个重叠轨道。Asset也可以具有元数据。
AV Foundation的一个重要概念是,初始化Asset或轨道并不一定意味着它已准备就绪。可能需要一些时间来计算项目的持续时间(例如,MP3文件可能不包含摘要信息)。在计算值时,不要阻塞当前线程,而是要求值并通过使用block的回调异步获取答案。
- 相关章节
Using Assets, Time and Media Representations
重放
AVFoundation允许您以复杂的方式管理Asset
的播放。 为了支持这一点,它将Asset
的呈现状态与Asset
本身分离。 这允许您例如在同一时间播放同一Asset
的两个不同片段,并以不同分辨率呈现。 Asset
的呈现状态由播放器项目对象管理; 资产内的每个轨道的呈现状态项目轨迹由播放器对象管理。 使用播放器项目和播放器项目轨道,例如,可以设置播放器呈现项目的视觉部分的大小,设置将在回放期间应用的音频混合参数和视频组合设置,或禁用 播放期间的资产。
您使用播放器对象播放播放器项目,并将播放器的输出定向到Core Animation图层。 您可以使用播放器队列按顺序安排播放器项目集合的播放。
- 参考章节
Playback
读,写,和重新编码Asset
AVFoundation允许您以多种方式创建Asset
的新表示。 您可以简单地重新编码现有Asset
,或者在iOS 4.1及更高版本中,您可以对Asset
的内容执行操作,并将结果保存为新Asset
。
您使用导出会话将现有Asset
重新编码为由少量常用预设之一定义的格式。 如果您需要更多地控制转换,在iOS 4.1和更高版本中,您可以使用Asset
读取器和Asset
写入器对象来将Asset
从一个表示转换为另一个。 使用这些对象,例如,您可以选择要在输出文件中表示的曲目,指定您自己的输出格式,或在转换过程中修改Asset
。
要生成波形的视觉表示,您可以使用Asset
读取器读取Asset
的音轨。
- 参考章节
Using Assets
缩略图
要创建视频演示的缩略图,您可以使用要从中生成缩略图的Asset
来初始化AVAssetImageGenerator的实例。 AVAssetImageGenerator使用默认启用的视频轨道生成图像。
- 参考章节
Using Assets
编辑
AVFoundation使用组合从现有的媒体片段(通常为一个或多个视频和音频轨道)创建新Asset
。 您可以使用可变合成添加和删除曲目,并调整其时间顺序。 您还可以设置音轨的相对音量和斜坡; 并设置视频轨道的不透明度和不透明度斜坡。 组合物是保存在存储器中的多个媒体的集合。 当您使用导出会话导出合成时,它会折叠到一个文件。
您还可以使用Asset
写入器从介质创建Asset
,如样本缓冲区或静态图像
- 参考章节
Editing
静止和视频媒体的捕获
来自相机和麦克风的记录输入由捕获会话管理。 捕获会话协调从输入设备到诸如电影文件的输出的数据流。 您可以为单个会话配置多个输入和输出,即使会话正在运行。 您向会话发送消息以启动和停止数据流。
此外,您可以使用预览图层的实例向用户显示相机正在录制的内容。
- 参考章节
Still and Video Media Capture
使用AVFoundation的并发编程
来自block
,键值观察者和通知处理程序的AVFoundation调用的回调不能保证在任何特定线程或队列上进行。 相反,AVFoundation在执行其内部任务的线程或队列上调用这些处理程序。
这里是通知和线程的两个一般准则:
- UI相关的通知发生在主线程上。
- 需要您创建和/或指定队列的类或方法将在该队列上返回通知。
除了这两个指南(有例外,在参考文档中注明),你不应该假设任何特定的线程将返回通知
如果你正在编写一个多线程应用程序,你可以使用NSThread方法isMainThread或[[NSThread currentThread] isEqual:<#一个存储的线程引用#>]来测试调用线程是否是你期望执行你的工作的线程。 您可以使用诸如performSelectorOnMainThread:withObject:waitUntilDone:和performSelector:onThread:withObject:waitUntilDone:modes:等方法将消息重定向到相应的线程。 您还可以使用dispatch_async在适当的队列上“弹回”您的block,即UI任务的主队列或用于并行操作的队列。 有关并发操作的更多信息,请参阅Concurrency Programming Guide
; 有关block
的详细信息,请参阅Blocks Programming Topics
。 AVCam-iOS:使用AVFoundation捕获图像和电影示例代码被认为是所有AVFoundation功能的主要示例,可以参考AVFoundation的线程和队列使用示例。
先决条件
AVFoundation是一个高级Cocoa框架。 要有效地使用它,您必须具有:
- 一个坚实的理解基本的Cocoa开发工具和技术
- 基本掌握
block
- 对键值编码和键值观察的基本理解
- 对于播放,对Core Animation的基本理解(请参阅
Core Animation Programming Guide
或基本播放,AVKit Framework Reference。
网友评论