はじめに
iOSのフレームワークはドメインモデルの良質なサンプル群である。そこでAV Foundationについてどういう思想で成り立っているか調査した
AV Foundationについて
AV FoundationはQuick Timeの後継である。知っている人はご存じのとおりQuick TimeのAPIはCベース、しかもCore FoundationやCore Graphicsの様にオブジェクト指向風実装でないので見通しが悪かった。でiPhone版iMovieを出すにあたり、動画関係APIをObjective-Cで一から書き直した。
その次に、Mac OS Xに移植されてFinal Cut Pro Xに導入された。
オブジェクト図から明らかになるドメインモデル
オブジェクト図である。関係が複雑であみの目の様になっているが、以下の通りに分類するとAV Foundationの設計思想が分かる。
- 紫:再生制御
- AVPlayer
- AVPlayerItem
- 黄:レンダリング前のポストエフェクト
- AVVideoCompositing
- MTAudioProcessingTapRef
- 緑:特殊効果
- AVMutableAudioMixInputParameters
- AVMutableVideoCompositionLayerInstruction
- AVMutableAudioMix
- AVMutableVideoCompositionInstruction
- AVMutableVideoComposition
- AVVideoCompositing
- 水:編集中のメディアファイル
- AVMutableComposition
- AVMutableCompositionTrack
- 赤:元のメディアファイル、素材
- AVAsset
- AVAssetTrack
つまり、5つのレイヤーに関心毎を分離して自由に組み合わせれる様になっているのである。
これは動画アプリの事を考えれば当たり前で、元ファイルからいろいろ試行錯誤しながら編集してそれぞれを比較したいし、いろいろ特殊効果を検討したい、という要件を考えればこういうモデルに行き着くだろう。
オブジェクト図から明らかになるドメインモデル その2
順序は逆になるが普通の再生中のオブジェクト図を示す。
AVPlayerクラスはクロックの更新をしているだけで、現在再生位置はAVPlayerが保持している。