2012年4月20日金曜日

AV Foundation 2

AV Foundation の OS X 用サンプルコードに AVSimplePlayer があります.このサンプルは OS X 10.7 以上,Xcode 4.0 以上でないと動きません.まずはOSのバージョンを確認して下さい.

サンプルコードをダウンロードしたら,Xcodeから実行してみましょう.最初は何もウィンドウが開きませんが,FileメニューからOpen...を選んでムービーを開くと,ウィンドウが開きます.なお,QuickTime Player 10.1 で開けても AVSimplePlayer では開けないムービーもあるようです.

このサンプルは AV Foundation の使い方を見せるために,Cocoaアプリとしてはかなり思い切った構造をしています.つまり,コントローラレイヤを置かず,NSDocument の子クラス AVSPDocument がビューと直接つながっています.この構造はCocoaアプリの開発では避けるべき構造なのですが,今は純粋に AV Foundation の使い方を学ぶためと思って,目をつぶりましょう.

まずは AVSPDocument.h から読み始めます.AVSPDocument クラスのインタフェース定義は次のようになっていますね.


@interface AVSPDocument : NSDocument
{
AVPlayer *player;
AVPlayerLayer *playerLayer;
NSProgressIndicator *loadingSpinner;
NSTextField *unplayableLabel;
NSTextField *noVideoLabel;
NSView *playerView;
NSButton *playPauseButton;
NSButton *fastForwardButton;
NSButton *rewindButton;
NSSlider *timeSlider;
id timeObserverToken;
}


AVで始まるクラス名(ここでは AVPlayer と AVPlayerLayer)が AV Foundation のクラスです.残りのNSで始まるクラスはお馴染みのCocoaビュークラスです.(iOSだとUIで始まるクラスですね.)

このクラスで鍵となるのは player, playerLayer, playerView の三つです.playerView はNSViewそのもので,実際には Core Animation の入れ物としてだけ機能させます.playerLayer がその Core Animation のレイヤーで,player と結び付けられます.つまり,player はムービーを読み込んで,playerLayer へとレンダリングします.playerView から見るとレイヤーの一つである playerLayer がムービーのフレームを描画していることになります.

詳しくは次回以降見てまいりましょう.

ところで,QTKitではいきなりムービープレーヤビュー (QTMovieView) を置けたのですが,AV Foundation には代わりになるビューは提供されていません.iOSでは Media Player フレームワークが(iOS 2 以降で*)提供されており,単純にムービーを再生するだけなら Media Player フレームワークに含まれる MPMoviePlayerController を使います.一方 OS X 10.7 にはまだ Media Player フレームワークは移植されておらず,QTKitを使い続けるか,あるいは代わりにWebKitを使うかしかありません.(iOSとの互換性を考えると,WebKitのほうがよいかもしれません.)

* Media Player フレームワークは iOS 5.0 になるまで仕様が安定しませんでした.

0 件のコメント:

コメントを投稿