MPMoviePlayerController видео и аудио не синхронизированы - PullRequest
1 голос
/ 11 декабря 2010

Я использую 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 ]

2 голосов
/ 08 июля 2011

Хорошо, после того, как я перенес ту же проблему, я покопался немного глубже и нашел другое решение.Моя проблема была немного другой.Я использовал промежуточное приложение проигрывателя фильмов, поэтому предложение Натана использовать проигрыватель фильмов до того, как Cocos2D сделал это, оказалось неэффективным.

Оказывается, что у MPMoviePlayerController есть это загадочное свойство useApplicationAudioSession, которое установлено в YESпо умолчанию.Установка этого свойства в NO «заставляет проигрыватель фильма использовать системный аудиосеанс с категорией несмешиваемого воспроизведения».(любезно предоставлено Apple docs ) и, между прочим, устраняет проблему с задержкой.

Я полагаюсь на CocosDenshion для аудио и, возможно, аудио сеанс приложения, как определено и используется CocosDenshion, несовместим саудио сеанс, необходимый для проигрывателя фильмов.Хотя это полная догадка, но это может быть теория о том, что происходит.

В любом случае, если вы используете поставляемую системой аудио-сессию, воспроизведение видео внезапно синхронизируется.

0 голосов
/ 11 декабря 2010

Вы проигрывали этот фильм в другом приложении (например, проигрывателе Quicktime), чтобы убедиться, что он не поврежден?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...