再生終了を検知する
動画や音声の再生終了を検知する。これもQuickTimeのAPIをそのまま使うやり方と、QTKitを使ってCocoaのみのやり方が必要があります。
QuickTime API使用
呼び出し側。一応Objective-Cからの呼び出しってことで。
@implementation MyObject ... { ... Movie qtmow = [nsmov QTMovie]; // NSMovieからの変換 QTCallBackUPP qtCallBackUPP = NewQTCallBackUPP(s_movieDidFinished); TimeBase timeBase = GetMovieTimeBase(qtmov); // コールバックオブジェクト生成 QTCallBack qtCallBack = NewCallBack(timeBase, callBackAtExtremes); if (qtCallBack != NULL) { // コールバック登録 CallMeWhen(qtCallBack, qtCallBackUPP, (long)self, /* refCon : 例えば自インスタンスを渡しておけば戻ってこれます */ triggerAtStop, /* flags : 終了時 */ 0, /* param2 : 無視 */ 0); /* param3 : 無視 */ } ... } ... @end
で、呼び出され側。
// コールバック関数 static void s_movieDidFinished(QTCallBack callBack, long refcon) { // 例えばこれでObjective-Cクラスに戻ります [(MyObject*)refcon movieDidFinished:nil]; }
QTKit 使用 (要QuickTime7)
どうせObjective-Cから使うならこっちの方が楽です。NSNotificationの枠組みを使います。(教えていただいたSynさんありがとうございます)
{ ... QTMovie* movie = [[QTMovie alloc] initWithURL:url error:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieDidEnd:) name:QTMovieDidEndNotification object:movie]; ... }
これだと呼び出され側もObjective-Cの枠組みですしね。
-(void) movieDidEnd:(NSNotification*)aNotification { // do something }