Проблема с черным экраном MPMoviePlayerViewController!

У меня есть этот код, пытающийся запустить видео на симуляторе iPhone 4.

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

Любые идеи?!

MPMoviePlayerViewController *mp =
[[MPMoviePlayerViewController alloc] initWithContentURL:videoUrl];

if (mp) {
    mp.moviePlayer.scalingMode = MPMovieScalingModeFill; 
    mp.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
    [mp.moviePlayer play];

    [self presentMoviePlayerViewControllerAnimated:mp];

    [mp release];
}

person Joao Henrique    schedule 12.07.2010    source источник


Ответы (2)


Я считаю, что проблема вызвана выпуском MPMoviePlayerViewController. Просто сохраните контроллер, пока не закончите с ним.

До "[MP Release];" добавьте эту строку, чтобы сохранить значение.

self.moviePlayerViewController = mp;

Затем обновите свой метод Dealloc, чтобы выполнить релиз:

- (void)dealloc {
   [_moviePlayerViewController release], _moviePlayerViewController = nil;
   [super dealloc];
}

Добавьте синтез в начало вашего файла .m:

@synthesize moviePlayerViewController = _moviePlayerViewController;

Добавьте определение в @interface вашего файла .h:

MPMovieViewController *_moviePlayerViewController;

Добавьте свойство в ваш файл .h:

@property (readwrite, retain) MPMovieViewController *moviePlayerViewController;

Вам могут понадобиться некоторые заголовки в вашем заголовке:

#import <MediaPlayer/MediaPlayer.h>
#import <MediaPlayer/MPMoviePlayerViewController.h>

Вам также может понадобиться сбалансировать вызов «presentMoviePlayer» с отклонением где-то:

[self dismissMoviePlayerViewControllerAnimated];

Уф, везде код. В любом случае, если вы закончили работу с ресурсом раньше, вы сможете выпустить его раньше, используя NotificationManager для отслеживания MPMoviePlayerPlaybackDidFinishNotification. Таких примеров много, поэтому повторяться не буду.

Надеюсь это поможет.

person Dave    schedule 19.07.2010
comment
Я не верю, что ответ правильный, mp сохраняется, когда он отображается модально. это не проблема с памятью.. - person talkol; 19.06.2012

Это код, который я использую:

MPMoviePlayerViewController *movieViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:contentUrl]];
movieViewController.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
[self presentMoviePlayerViewControllerAnimated:movieViewController];
[movieViewController release];

Кажется, это работает нормально для меня. Два примечания:

  • Некоторые симуляторы (например, текущая iOS 5.0) вылетают при воспроизведении фильма, но на реальном устройстве работают
  • если вы опустите часть movieSourceType, черный экран будет отображаться примерно за секунду до начала фильма
person talkol    schedule 19.06.2012