はじめに
Appleプラットフォーム(iOS/macOS/tvOS)ではオーディオビジュアル(AV)の再生と作成をAVFoundation
1 2やAVKit
3というFrameworkで実現しています 。
今回からドキュメントの内容を翻訳・写経したり、先駆者の記事を読み解きつつこれらのFrameworkについてまとめていきたいと思います。
本シリーズのゴール
読者の皆様にiOSでAVの再生を行うための基礎と取っ掛かりをインプットし、アプリケーションの開発時に困らなくなることをゴールとします。
この回でのゴール
次回以降の説明に備え、AVFoundationやAVKitの概要を知ること
本シリーズの対象者
本シリーズの対象者は以下のスキルセットを持ち、iOSでAVを再生したり作成したりについて興味がある方が対象です。
- iOSアプリの開発を行ったことがある
- Swift/Objective-Cがある程度分かる人
注意
- 本シリーズでは主にiOSに限定して話を展開します。
- 本シリーズで出てくる単語 AVとは = オーディオビジュアル = ビデオ、音声・音楽のことです
iOS上でAVを取り扱うためには
iOSでは以下のようなアーキテクチャでAVを取り扱います。それぞれの四角形がFrameworkとなっています。
AVFoundationではCore Audio、Core Media、Core AnnimationのFrameworkを活用してAVの各種操作を可能にしています。
Core ~~ Framework
Core ~~~ と名前の付いたFrameworkでそれぞれメディアの低レベルレイヤでの処理(映像や音声へのバイトデータ操作など)や処理で利用するデータ型を提供しています。
Core Media
AV処理で欠かせない各種パイプライン処理と処理で利用するデータ型を定義しています4。具体的には、Core Media でAVの各フレームでのピクセルデータ、音声の波形データなどを参照・操作することが可能になります。
Core Audio
音声を処理するために必要なデータ型を定義し、それらはオーディオ関係の処理でハードウェアとのやり取りに使用することができる5。
Core Animation
Viewやその他の画面に表示されるような要素をアニメーションさせるために使われるグラフィックの描画やそれに必要なデータ型を定義したFrameworkになります6。
つまり、AVの再生時においてCore Mediaで処理した各ピクセルデータを端末内のオンボードグラフィックスハードウェア(いわゆるGPU部分)に渡されてアニメーションとしてView内に表示します。
AVFoundationとは
AVFoundationは、AVの再生と作成に使用できるフレームワークで、AVに関する作業を細かいレベルで行うためのインタフェースを提供してくれます。たとえば、メディアファイルの再生、検査、作成、編集、再エンコードなどができます。他にも、デバイスから入力ストリームを取得して、リアルタイムでキャプチャ中 および再生中のビデオを操作することもできます。
ざっくり言ってしまうと、iMovieの各種機能がプログラムから呼び出せるイメージです。
AVKit
AVFoundationの機能にUIKit内で定義されているコンポーネントをもとにUIを与え、それらを呼び出せるようにしているFrameworkです。AVを再生したい、UIの用意は自分でしなくでもOSデフォルトのUIが与えられれば良いといった方のためのものです。
ユーザーコントロール、チャプター操作、字幕やクローズドキャプションのサポート、再生ルート選択機能を備えたメディア再生用のUIを提供してくれます。AVの操作や編集は未対応です。加えて、再生時のUIは決まったものが提供される関係上カスタマイズできる余地も少ないです。
まとめ
基本的にはiOS上でAVを取り扱っていく際は、AVFoundationを学んでいくのが最初は良いと思います。
AVを再生したいだけで、UIのカスタマイズはあまり考えてない、その他の機能も要件的に必要ない場合はAVKitを勉強して利用すると簡単で良いかと思います。
次回はAVメディアの再生に重きを置き、サンプルプログラムを実装しつつ理解を深めていきましょう。
その2へつづく
参考文献
iosの動画再生周りの基礎を調べた
AVPlayerについて調べた