AVFoundation 基本函括了基本的音频操作,信息捕获、编辑基本信息与影片读写。这里只说简单的音频操作。
什么时候使用AVFoundation
1.获取媒体属性
2.自定义播放UI和行为
3.组成与组合媒体
4.重定义媒体信息
5.控制相机特性
AVFoundation位置
AVFoundation 位于核心层上层,在UIKit下层。
AVFoundation类分组
AVFoundation类分组主要可以分成4部分:播放设置、信息捕获、编辑和读写4块。
播放(playback)
AVAsset
AVAsset是定时的视听媒体,它可以是视频、影片、歌曲、播客节目;可以是本地或者远程的;也可以是限定或者非限定的流;
获取一个AVAsset的方式有:程序捆绑;媒体库;图片库;获取网络地址;
AVAsset的组成:AVAssetTrackSegment->AVAssetTrack->AVAsset;
AVAssect信息获取会花费一定时间的原因:读取不同的文件格式、大文件文件信息读取,网络文件读取
异步键值加载协议:告诉我们媒体什么时候值有效,可以准备播放。
AVPlayer
AVPlayer是一个控制对象,它可以做的操作有:播放、停止和速率;不同AVAsset可以有不同的播放属性。
一个AVPlayer可以有多个AVAsset,OC通过AVPlayerItem来协调AVAsst和AVPlayer之间的关系。AVPlayerItem与AVAsset一样,同样有AVPlayerItemTrack对象。
AVPlayerLayer
播放对象与视图之间的实现需要通过AVPlayerLayer来控制。具体播放一个音频视频的步骤是:
播放步骤集合:
1.创建一个AVAsset
2.告诉asset的Track可以被加载了
3.一旦加载,为asset创建一个PlayerItem
4.把Item赋值给Player
5.把Player复制给PlayerLayer
6.等待直到Item准备好播放,然后开始播放。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
添加滑动条:开始:暂停播放和移除通知。
更新播放时间:seekToTime:
关于播放要记住的:
1.Player 是一个控制器
2.player Item 控制当前状态
3.显示由一个player layer处理
4.注意你的播放队列。
编辑(Editing)
由asset集合组成小块作品:它可以是多个不同asset的组成;
AVCompositonTrackSegment->AVCompositionTrack->AVComposition
时间控制需要注意的事项:
1.浮点数不允许精确的时间估算。
2.奇怪的时间尺度:29.97与30000/1001不相等。
3.混合的时间尺度:29.97fps视频和44.1kHz音频
OS中使用的时间:
音频混合:
1.临近的部分:AVCompostion;
2.合并音频轨迹:AVAudioMix;
3.合并视频轨迹:compositing;
音频混合对象:AVMutableAudioMixInputParameters –>AVMutableAudioMix
每一个音频混合输入参数:1.由一个音轨组成。2。描述了如何通过时间调整声音。
默认的声音不涉及混合。
视频复合:
1.临近的部分:AVComposition;
2.合并音频轨迹:AVAudioMix;
3.合并视频轨迹:AVVideoComposition;
AVComposition和AVVideoComposition
AVVideoComposition需要做的:
对于每一个时间范围的AVAsset:
1.创建一个对应时间范围的AVMutableVideoCompositionInstruction对象。
2.对于每一个轨迹,都是复合的一部分:为轨迹创建一个AVMutableVideoCompositionLayerInstruction对象。
3.明确指定透明度。明确指定开始与结束的矩阵转换。
音频VS视频
音频:1.对于每一个轨迹都是描述体积变化的时间范围。2.包含绝对的轨迹。
视频:1.对于每一个时间范围,在轨迹上描述指令组成信息。2.必须明确的包含轨迹
协调合并对象进行工作:
AVAudioMix与AVVideoComposition:
1.他们都不是对象asset对象集合。
2.操作时使用对象Asset。
3.要使用行为时,将传递到控制对象。可以合并的控制对象有:
编辑要记住的:
1.composition是Asset的集合。他们由其他asset的segment对象组成。
2.他们通过轨迹进行音频混合。操作可能是不明显的。
3.视频Composition是一个合成的时间范围。它的操作要是显性的。
核心动画与媒体(Core animation and media)
1.所有的UIKit渲染都使用了核心动画。
2. 我们想对事物做的图形操作,如标题。
3.核心动画对于图形的渲染、投射和动画有极大的实用性。
核心动画与AV foundation
1. UIView使用CALayer 子类。
2. AVFoundation 提供CALayer子类:如,演示影片使用AVPlayerLayer。显示捕获的视频使用 AVCaptureVideoPreviewLayer。