MPMoviePlayerViewController Проблема с черным экраном! - PullRequest
1 голос
/ 12 июля 2010

У меня есть этот код, пытающийся запустить видео на симуляторе 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];
}

Ответы [ 2 ]

1 голос
/ 20 июля 2010

Я считаю, что проблема вызвана выпуском 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. Есть много примеров этого, поэтому я не буду повторять это.

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

0 голосов
/ 19 июня 2012

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

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

Кажется, у меня нормально работает. Две заметки:

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