Exploring AVFoundation - Notes
WWDC 2011 - Session 405 - Exploring AV Foundation
https://developer.apple.com/videos/play/wwdc2011/405/
1. 扯淡
可以学习英文教程,但要循序渐进,之后总结实践很重要。转化为自己的理解才行。之前看了一段时间 Doctmentation,感觉很大很复杂的框架。之后动手写了一些代码,回头再看相关 Session 就豁然开朗,一切不过是熟悉 Cocoa 框架结构,无非就是本事视频相关的不熟悉,直接开发就比较抽象。开发实践中持续学习,也就进入佳境。
视频学习时,双屏必备利器。加上最近 iPad 在 Session Keynote 上笔记,效率很高。
Session 不停的示例代码非常易于理解。
2. 总结
Keynote 要点如下:
- 五大功能:检测/播放/编辑片段/导出/录制。
- 两种媒体 model:static/dynamic, 类似NSArray/NSMutableArray,对应读取时是否会 mutate。
- 异步加载
- Key-Value Observe 支持大多数属性
- “There’s a protocol for that” TM
- AVPlayerItem: AVAsynchronousKeyValueLoading:
loadValuesAsynchronouslyForKeys(_:completionHandler:)
,可以异步获取状态/属性变化,以更新 UI 等。 - AVPlayer 时间属性变化很快,异步 KVO 不再合适,改为同步 KVO,需要添加/移除观察:
addPeriodicTimeObserverForInterval(_:queue:usingBlock:)
- AVPlayerItem 可获取媒体相关的属性,对 status 添加KVO。
- AVPlayerItemTrack:enabled 属性可以选择性播放 track。
- AVQueuePlayer:播放一组 AVAsset,适用于编辑完播放。
- AVPlayerLayer 用于显示媒体在屏幕上。有 readyForDisplay/videoGravity 等属性。
- AVMediaSelectionGroup 用于字幕/音频等可选 track。
- iPod Library: MPMediaQuery
- Camera Roll: AssetsLibrary (iOS 9: Photos)
- static/dynamic model 对应不同的观察机制,如下:
Matters of protocol And platform etiquette
- AVAsynchronousKeyValueLoading
1 | loadValuesAsynchronouslyForKeys:completionHandler: |
- NSObject(NSKeyValueObserving)
1 | addObserver:forKeyPath:options:context: |
3. 部分示例代码:
1 | NSArray *keys = [NSArray arrayWithObject:@”playable”]; |
1 | - (void)setUpTransportUI { |