AVFoundation 指南

由于本人工作的公司经营不下去了,所以本人现在处于待业状态,正好有时间充充电,翻译一下苹果的官方文档,参考工具是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。

另请参阅

有几个AVFoundation示例,包括两个是理解和实现的关键相机捕获功能:

AVCam-iOS:使用AVFoundation捕获图像和电影是用于实现使用相机功能的任何程序的规范示例代码。 它是一个完整的示例,有详细的文档,涵盖了显示最佳实践的大多数功能。

AVCamManual:将AVCam扩展为使用手动捕获API是AVCam的配套应用程序。 它使用手动相机控制来实现相机功能。 它也是一个完整的例子,良好的文档,应该被视为创建利用手动控制的相机应用程序的规范示例。

RosyWriter是一个演示实时帧处理的示例,特别是如何对视频内容应用过滤器。 这是一个非常常见的开发人员要求,此示例涵盖了该功能。

AVLocationPlayer:使用AVFoundation元数据阅读API演示使用元数据API。

AVAsset

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容