与AVAudioPlayer同步播放MPMoviePlayerController

时间:2012-02-04 04:33:04

标签: iphone objective-c ios notifications mpmovieplayercontroller

我正在尝试将一部电影添加到游戏的介绍中。这部电影没有声音/音乐。但是,我确实在后台播放音乐。音乐有点具体,因为音乐的介绍只要电影然后节奏就会更快一点。

我在某些设备上遇到的问题,比如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秒钟开始播放,最终导致音频关闭。我该怎么做才能确保电影和音乐同步播放?

我不能做的事,除非另有说服力:

  1. 我无法将音乐放在视频上,因为音乐需要循环播放几个视图。
  2. 我无法将影片创建为UIImageView动画。

1 个答案:

答案 0 :(得分:2)

以下是我遇到过的事情。

我为:MPMoviePlayerLoadStateDidChangeNotification

创建了通知

当调用选择器时,返回MPMovieLoadStatePlaythroughOK的通知我播放了电影和音轨。

希望这有帮助。