先看一篇关于音频的基础介绍iOS音频处理技术总结
AVFoundation是可以用来播放和创建基于时间的视听媒体的几个框架之一。它提供了一个Objective-C接口,您可以使用它来处理基于时间的视听数据。例如,您可以使用它来检查、创建、编辑或重新编码媒体文件。您还可以从设备中获取输入流,并在实时捕获和回放期间操作视频。
大概看一下就好。 AVFoundation框架api主要有两大部分: 与视频相关的api和与音频相关的api。旧的音频相关类提供了处理音频的简单方法。播放声音文件使用AVAudioPlayer;录制音频,使用AVAudioRecorder。 当然还可以使用AVAudioSession配置应用程序的音频行为具体参考Audio Session Programming Guide
AVFoundation框架用来表示媒体的主要类是AVAsset。框架的设计在很大程度上受这种表示方式的指导。了解它的结构将帮助您理解框架是如何工作的。AVAsset实例是媒体数据的集合的整体表示。它提供关于数据集合的信息,例如它的标题、持续时间、自然的表示大小等。AVAsset是其他类的超类,用于根据URL从媒体创建asset实例并创建新组合。资产中的每一个单独的媒体数据都是统一类型的,称为跟踪。资产中的每一个单独的媒体数据都是统一类型的,称为轨迹。在一个典型的简单情况下,一个轨迹表示音频组件,另一个表示视频组件;然而,在复杂的构图中,音频和视频可能有多个重叠的音轨。资产也可能有元数据。
AV Foundation中的一个重要概念是,初始化asset或轨迹并不一定意味着它可以使用。它可能需要一些时间来计算,甚至是目标文件(例如,一个MP3文件可能不包含摘要信息)的持续时间。在计算值时,不能阻塞当前线程。而是通过请求的方式,在block的异步回调中获取应答。
AVFoundation允许您以复杂的方式管理asset的回放。为了支持这一点,它将资产的表示状态与资产本身分离开来。例如,这允许您同时在不同分辨率下呈现同一资产的两个不同部分。资产的表示状态由播放器项对象管理;资产中的每个轨迹的表示状态由一个播放器项目轨迹对象管理。使用播放器项和播放器项轨迹可以设置播放器项的可视部分显示的大小,设置回放期间应用的音频混合参数和视频合成设置,或者在回放期间禁用资产的组件。您使用player对象来播放播放器项目,并将播放器的输出指向核心动画层。您可以使用播放器队列来按顺序安排播放器项集合的回放。
AVFoundation允许您以多种方式创建asset的新形式。您可以简单地对现有资产进行重新编码(在ios4.1之后)您可以对资产的内容执行操作,并将结果保存为新的asset。
要创建视频演示的缩略图,需要使用要生成缩略图的asset初始化一个AVAssetImageGenerator实例。AVAssetImageGenerator使用默认启用的视频轨迹来生成图像。
AVFoundation使用组合来从现有的媒体片段(通常是一个或多个视频和音频轨道)创建新的asset。您可以使用可变组合来添加和删除轨迹,并调整它们的时间顺序。您还可以设置相对音量和音轨的音量;设置视频轨迹的不透明度和不透明度坡度。一个组合是内存中保存的媒体片段的集合。当您使用导出会话导出组合时,它将被折叠成一个文件。您还可以使用资产写入器从媒体(如示例缓冲区或静态图像)创建资产。
来自摄像机和麦克风的录制输入由捕获会话管理。捕获会话协调从输入设备到输出(如电影文件)的数据流。您可以为一个会话配置多个输入和输出,即使会话正在运行。向会话发送消息以启动和停止数据流。
此外,还可以使用预览层的实例向用户显示相机正在记录的内容。
来自AVFoundation的回调(block,键值观察器,通知处理器)都不能保证在任何特定的线程或队列上进行。相反,AVFoundation在执行内部任务的线程或队列上调用这些处理程序。
关于通知和线程,有两个通用的指南:
与UI相关的通知发生在主线程上
需要创建和指定队列的类或方法将在该队列上返回通知。 除了这两个指导原则(还有例外,在参考文档中提到)之外,您不应该假设通知将返回到任何特定的线程。
更多示例查看:AVCam-iOS: Using AVFoundation to Capture Images and Movies