ムービーを再生するには、MediaPlayer.framework をインポートし、MPMoviePlayerController を利用する事で、比較的簡単に実装する事ができます。
[iPhone] メディアプレイヤーで動画再生を参考に実装してみる。
- (void)playMovie:(NSString *)movieName {
NSString *path = [[NSBundle mainBundle] pathForResource:movieName ofType:@""];
NSURL *url = [NSURL fileURLWithPath:path];
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url];
[player setShouldAutoplay:NO];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(finishPreload:)
name:MPMediaPlaybackIsPreparedToPlayDidChangeNotification
object:player];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(finishPlayback:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:player];
[player.view setFrame:CGRectMake(0, 0, 640.0f, 400.0f)];
[self.view addSubview:player.view];
}
- (void)finishPreload:(NSNotification *)aNotification {
MPMoviePlayerController *player = [aNotification object];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:MPMediaPlaybackIsPreparedToPlayDidChangeNotification
object:player];
}
- (void)finishPlayback:(NSNotification *)aNotification {
MPMoviePlayerController *player = [aNotification object];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:MPMoviePlayerPlaybackDidFinishNotification
object:player];
[player stop];
[player.view removeFromSuperview];
[player release];
}
NSNotificationCenter を利用して、プリロードや終了などを通知しています。 .h ファイルを見る限り delegate メソッドが記載されてないので、この方法なんでしょうね。
ただ、上記の場合は、自動連続再生とか複数に対応する場合のコードですかね? 普通に再生するだけなら Notification は使わなくてもいいんじゃないかな?と思います。
なので、手動でコントロールする場合は、MPMoviePlayerController を @synthesize してアクセスすればよいかと。 その際、メモリリークしないように release とかどこかしらでしないといけないと思いますが・・・。
- (void)playMovie:(NSString *)movieName {
NSString *path = [[NSBundle mainBundle] pathForResource:movieName ofType:@""];
NSURL *url = [NSURL fileURLWithPath:path];
initWithContentURL:url];
if (self.moviePlayer != nil) [moviePlayer release];
self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];
[self.moviePlayer setShouldAutoplay:NO];
[self.moviePlayer.view setFrame:CGRectMake(0, 0, 640.0f, 400.0f)];
[self.view addSubview:self.moviePlayer.view];
}