ソフトウェア開発メモ

日々のソフトウェア設計、実装で考えている、気づいた事を書いています。それが真実か否かは保証しません。悪しからず。

AV Foundationのドメインモデル

はじめに

iOS、リバースモデリングの勧め。 - 概念構築メモ

で言及したとおり、iOSフレームワークドメインモデルの宝庫である。そこでAV Foundationについてどういう思想で成り立っているか調査した

AV Foundationについて

AV FoundationはQuick Timeの後継である。知っている人はご存じのとおりQuick TimeのAPIはCベース、しかもCore FoundationやCore Graphicsの様にオブジェクト指向風実装でないので見通しが悪かった。でiPhoneiMovieを出すにあたり、動画関係APIObjective-Cで一から書き直した。 その次に、Mac OS Xに移植されてFinal Cut Pro Xに導入された。

オブジェクト図から明らかになるドメインモデル

f:id:objectiveworker:20140923124147p:plain

オブジェクト図である。関係が複雑であみの目の様になっているが、以下の通りに分類するとAV Foundationの設計思想が分かる。

  • 紫:再生制御
    • AVPlayer
    • AVPlayerItem
  • 黄:レンダリング前のポストエフェクト
    • AVVideoCompositing
    • MTAudioProcessingTapRef
  • 緑:特殊効果
    • AVMutableAudioMixInputParameters
    • AVMutableVideoCompositionLayerInstruction
    • AVMutableAudioMix
    • AVMutableVideoCompositionInstruction
    • AVMutableVideoComposition
    • AVVideoCompositing
  • 水:編集中のメディアファイル
    • AVMutableComposition
    • AVMutableCompositionTrack
  • 赤:元のメディアファイル、素材
    • AVAsset
    • AVAssetTrack

つまり、5つのレイヤーに関心毎を分離して自由に組み合わせれる様になっているのである。

これは動画アプリの事を考えれば当たり前で、元ファイルからいろいろ試行錯誤しながら編集してそれぞれを比較したいし、いろいろ特殊効果を検討したい、という要件を考えればこういうモデルに行き着くだろう。

オブジェクト図から明らかになるドメインモデル その2

f:id:objectiveworker:20140923124310p:plain

順序は逆になるが普通の再生中のオブジェクト図を示す。 AVPlayerクラスはクロックの更新をしているだけで、現在再生位置はAVPlayerが保持している。