[AVFoundation Guide]关于AVFoundation

本文是本人自己辛苦翻译的,请转载的朋友注明,翻译于Z.MJun的简书 ,感谢!<翻译不容易啊>


翻译于2016年9月6日


About AVFoundation
Important:这个文档包含关于API和开发技术的初级信息。这个信息受变化和软件支配。软件通过这个文档,最终会在操作系统上被测试。


AVFoundation 是其中一个你可以是用来播放和创建基于时间的视听媒体。这里提供OBJ-C接口,你可以使用他来管理一个详细等级的基于时间的视听媒体数据。例如,你可以使用它来检查,创建,编辑,和写入媒体文件。你可以从设备上获取输入流,和操作视频实时捕获,播放等。

图I-1,AVFoundation stack on iOS
图I-1,AVFoundation stack on iOS
图I-2,AVFoundation stack on OS X
frameworksBlockDiagramOSX_2x.png

你应该通常使用最高级的可用的抽象方法来允许你的执行你想要执行的任务。

  • 如果你只是想简单播放电影,可以使用AVKit framework.
  • 在IOS上,当记录视频时,如果你需要对格式最小控制,使用UIKit framework。

切记,在你使用AV Foundation上的一些原始数据结构,包含最近时间数据结构和不透明的对象来携带和描述媒体数据,在Core Media framework中有声明。

At a Glance

关于 AVFoundation framework有两个方面。一个是视频的APIs,一个是音频的APIs。旧的音频相关对象提供了简单的方法来处理音频。这个描述在Multimedia Programming Guide,这文档不做描述。

Representing and Using Media with AVFoundation

AV Foundation framework使用基础类AVAsset来代表媒体。对于这个,有大量的引导支持。了解这个数据结构有助于了解这个库是怎么工作的。AVAsset实例化汇总了一个或者多个媒体数据(音频和视频的轨道)。他提供了所有信息,如标题,时长,内存大小和其他。AVAsset不绑定数据类型。AVAsset是其他类的父类,用于通过一个URL创建媒体和创建新的AVAsset组件。

每一个在AVAsset的单独的媒体数据,都是一定格式和相应一个轨道。在常用的方法力,一个轨道代表音频组件和其他代表视频组件。在一个混合组件中,音频和视频可能包含多个重叠的轨道。AVAsset也有元数据。

在AV Foundation中的一个重要概念是,初始化一个AVAsset或者轨道并不意味它是现成的,他可能需要一些时间来计算持续时间(一个MP3文件,例如,没有包含整体信息)。而不是在阻塞当前线程,来计算一个值。你需要定义一个异步的block来获取这个值。

关键字Using Assets,Time and Media Representations

回放

AVFoundation允许你通过复杂方法来管理回放。对于这个,它从AVAsset上分离了AVAsset的表现状态。这允许你,例如,播放两个不同片段,使用同样的AVAsset,同事呈现在不用的分辨率下。这个呈现状态是被player item对象管理着。呈现对象的每个轨道是由player item track对象管理。使用播放器和播放器轨道,例如,设置播放器大小,设置播放过程中播放器的混合参数,视频的组合部分,和禁止播放中部分组件使用。

你可以使用player对象播放播放器,和直接的把播放器的输出到核心动画Core Animation层。你还可以使用player queue播放队列来按顺序播放内容。

关键字Playback

读取,写入和对Assets重新编码

在多个方面,AVFoundation允许你创建一个新的asset。你可以简单的重新编码现有的Assets,或者在IOS4.1及以上。你可以在执行操作Assets上的内容,并且保存在一个新的Assets上。

你可以使用export session重新编译一个存在的Assets到一些常用的预设置格式。如果你需要更多的控制转格式。在IOS4.1及以上,你可以使用asset readerasset writer对象来将Assets表现形式转到另一个上。使用这些类,例如,选择一个轨道是你想展现在输出文件力,特别是你的输出格式,或者修改转换过程中的Assets。

要产生wave格式,你可以使用asset reader来读取音频轨道。
关键字Using Assets

略缩图

生成视频的略缩图,你可以初始化使用AVAssetImageGenerator来获取你想要的略缩图。使用这个默认可用视频轨道来生成图片。
关键字Using Assets

编辑

AVFoundation使用compositions从存在的多个媒体创建新的assets(通常,一个或多个视频和音频轨道)。你使用可变的组合来增加和减少轨道,和调整他们的时间排序。你同时可以设置相对音量和音频轨道率。设置视频的透明度和透明率。一个媒体组合是存放在内存里。当然你使用export session输出一个组合,他讲导入到文件里。

你还可以通过asset writer为以下创建assets,如临时缓存,静待图片组
关键字Editing

静态和视频媒体捕获

capture session记录摄像头输入,和管理麦克风。capture会话协调一些数据流从输入设备到输出设备,如电影文件。你可以配置不同的输入和输入到简单的会话。档这个会话运行,你发送信息到这个会话中来启动和结束数据流。

另外,你可以使用preview layer向用户展示摄像头的记录。
关键字Still and Video Media Capture

AVFoundation并发程序设计

AVFoundation回调---调用block,kvo,notification方法---不保证在任何特定的线程或队列上。换句话说,AVFoundation在线程上或者队列上调用这些处理程序,来执行内部任务。

一般有两个准则,如notifications和线程ing

  • 在主线程上处理用户界面相关通知。
  • 需要创建或指定一个队列的类或方法将返回该队列的通知。

在这个两个准则之上(也有例外,在当前的参考文档中)你不应该假设通知在任何特定的线程上返回。

如果你写一个多线程应用,你可以使用NSThread方法。

isMainThread or [[NSThread currentThread] isEqual:<#A stored thread reference#>]

来检测调用的线程是你期望的一个线程来执行你的工作。你可以重定向到合适的线程下。如使用这个方法performSelectorOnMainThread:withObject:waitUntilDone:performSelector:onThread:withObject:waitUntilDone:modes:。同样,你可以在合适的队列上使用使用dispatch_async来“反弹”你的block,无论是用于用户界面任务的主队列还是一个用于并发操作的队列。关于更多的并发操作,请看Concurrency Programming Guide。关于block的,请看Blocks Programming TopicsAVCam-iOS: Using AVFoundation to Capture Images and Movies简单代码来介绍基础例子,所有的AVFoundation功能和可为线程和队列使用AVFoundation实例参考。

Prerequisites

AVFoundation是Cocoa framework里一个前沿的框架。使用前,你需要了解一下内容:


更多

这里有一些AVFoundation列子,包括两个,一个是关键理解和实现摄像头捕获方法。

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

推荐阅读更多精彩内容