MPMoviePlayerController视频和音频不同步

时间:2010-12-11 01:29:05

标签: objective-c

我正在使用MPMoviePlayerController在使用Cocos2D的应用程序中播放电影。但是,当电影运行时,它只播放电影的最后2/3音频。这并不是说电影在前三分钟是沉默的。当电影开始播放时,它开始播放音频,其中它将是电影的1/3。换句话说,音频和视频不同步。

我正在使用iOS 4.2,我已升级到最新的xCode。以下是我正在使用的代码。有人能告诉我为什么会这样。

- (id) init
{
   self = [super init];
   if (self != nil)
   {
       NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]    
                           pathForResource:@"SomeMovie" ofType:@"m4v"]]; 
       MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc]  
                             initWithContentURL:url]; 
       // Register to receive a notification when the movie has finished playing. 
       [[NSNotificationCenter defaultCenter] addObserver:self 
                                    selector:@selector(PlayBackDidFinish:)         
                                        name:MPMoviePlayerPlaybackDidFinishNotification 
                                               object:moviePlayer];  

       moviePlayer.controlStyle = MPMovieControlStyleNone; 
       moviePlayer.shouldAutoplay = YES; 
       [moviePlayer.view setTransform:CGAffineTransformMakeRotation((float)M_PI_2)]; 
       [moviePlayer.view setFrame:[[UIScreen mainScreen] bounds]];
       [[[CCDirector sharedDirector] openGLView] addSubview:moviePlayer.view]; 
   }
   return self;
}

- (void) PlayBackDidFinish:(NSNotification *)notification
{
    MPMoviePlayerController *moviePlayer = [notification object]; 
              [[NSNotificationCenter defaultCenter] removeObserver:self 
                                     name:MPMoviePlayerPlaybackDidFinishNotification 
                                              object:moviePlayer]; 

    [moviePlayer.view removeFromSuperview]; 

    [moviePlayer release];
}

2 个答案:

答案 0 :(得分:2)

好吧,在遇到同样的问题之后,我深入挖掘并想出了一个不同的解决方案。我的问题略有不同。我正在使用电影播放器​​mid-app,所以Nathan在Cocos2D之前使用电影播放器​​的建议没有效果。

事实证明,MPMoviePlayerController有一个名为useApplicationAudioSession的神秘属性,默认设置为YES。将此属性设置为NO“会导致影片播放器使用系统提供的具有不可混合播放类别的音频会话。” (顺便提一下Apple docs),并顺便解决了滞后问题。

我依靠CocosDenshion获取音频,并且CocosDenshion定义和使用的应用程序音频会话可能与电影播放器​​所需的音频会话不兼容。这是一个完全的推测,但它可能是一个关于发生了什么的理论。

无论哪种方式,如果您使用系统提供的音频会话,视频播放会突然同步。

答案 1 :(得分:0)

您是否曾在其他应用(例如Quicktime播放器)中播放此电影,以确认其未损坏?