【发布时间】:2012-02-04 04:33:03
【问题描述】:
我正在尝试在游戏介绍中添加一部电影。电影没有声音/音乐。但是,我确实有音乐在背景中循环播放。音乐有点具体,因为音乐的前奏与电影一样长,然后节奏加快了一点。
我遇到的问题是,在某些设备上,例如 iPod 4G,播放音乐过快,这基本上会破坏电影序列。这在我的 iPhone 4S 中不会发生。
我尝试寻找某种关于电影何时开始播放的通知,然后开始播放音乐。我失败了。
这是我目前得到的:
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"SplashVideo" ofType:@"mp4"]]];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerPlaybackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:player];
[[player view] setFrame:CGRectMake(0, 0, 480, 320)];
[player setControlStyle:MPMovieControlStyleNone];
[[self view] addSubview:[player view]];
// play movie
[player play];
//musicPlayer is defined in the header
[self setMusicPlayer:[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"SplashMusic" ofType:@"m4a"]] error:nil]];
[[self musicPlayer] setNumberOfLoops:loop];
[[self musicPlayer] prepareToPlay];
[[self musicPlayer] setDelegate:self];
}
- (void)moviePlayerPlaybackDidFinish:(NSNotification*) aNotification {
DLog(@"**********");
MPMoviePlayerController *player = [aNotification object];
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:player];
[player stop];
[[player view] removeFromSuperview];
[player autorelease];
}
总结,在 iPhone 4S 上播放完美无缺,但在 iPod 4G 上,音乐在电影播放前大约 2 秒开始播放,最终导致前奏中断。如何确保电影和音乐同步播放?
除非另有说服力,否则我不能做的事情:
- 我无法将音乐放在视频中,因为音乐是为了循环播放几次观看。
- 我无法将影片创建为 UIImageView 动画。
【问题讨论】:
-
使用 MPMoviePlayerController 的播放状态通知来同步音频和视频的开始。
-
@Till - 谢谢,我试过了,但仍然遇到同样的问题。如果我在拨打
@selecter通知后将音乐推迟播放约 1 秒,iPod 运行良好,但在 iPhone 上歌曲滞后。 -
那如何按我说的做,等待MPMoviePlayerController播放状态“playThroughOK”,此时暂停视频。然后等待 AVAudioPlayer 开始播放(在 currentTime 上使用 KVO),然后取消暂停视频播放。
-
@Till - 太棒了!将其发布为答案,以便我可以给你信用和积分。虽然 playThrough ok 是 loadState,而不是 playBackState :)
标签: iphone objective-c ios notifications mpmovieplayercontroller