MPMoviePlayerController показывает пустой черный экран - PullRequest
25 голосов
/ 08 декабря 2011

Я использую MPMoviePlayerController для воспроизведения локального файла в папке с приложением, которую я скачал для URL сервера:

itemMoviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL];
 [self.view addSubview:itemMoviePlayerController.view];
 itemMoviePlayerController.fullscreen = YES;
 itemMoviePlayerController.movieSourceType = MPMovieSourceTypeFile;
 itemMoviePlayerController.initialPlaybackTime = -1.0;
 [itemMoviePlayerController play];

Когда я играю файл .mov сразу после его загрузки, он показывает черный пустой экран и пользовательский интерфейс приложения не работает. Но если в следующий раз воспроизвести тот же локальный файл, он воспроизводится нормально. Я даже проверил playState & localState для MPMoviePlayerController они кажутся нормальными. В чем может быть причина черного пустого экрана?

Ответы [ 13 ]

0 голосов
/ 24 апреля 2013

Вы должны сделать это с CGRectMake (0, 0, 0, 0) в завершенном обратном вызове!

-(void)playMovieAtURL:(NSURL*)theURL

{
    MPMoviePlayerController* theMovie=[[MPMoviePlayerController alloc] initWithContentURL:theURL];
    theMovie.scalingMode=MPMovieScalingModeAspectFill;

    theMovie.view.frame = CGRectMake(2, 246, 317, 70);
    [self.view addSubview:theMovie.view];

    // Register for the playback finished notification. 

    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(myMovieFinishedCallback:) 
                                                 name:MPMoviePlayerPlaybackDidFinishNotification 
                                               object:theMovie];

    // Movie playback is asynchronous, so this method returns immediately. 
    [theMovie play];
} 

// When the movie is done,release the controller. 
-(void)myMovieFinishedCallback:(NSNotification*)aNotification 
{
    MPMoviePlayerController* theMovie=[aNotification object]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self 
                                                    name:MPMoviePlayerPlaybackDidFinishNotification 
                                                  object:theMovie];

    theMovie.view.frame = CGRectMake(0, 0, 0, 0);
    // Release the movie instance created in playMovieAtURL
    [theMovie release];

}
0 голосов
/ 10 июля 2012

Эта проблема кажется исправленной после обновления устройства iOS до 5.0.
Кажется, проблема iOS SDK для предыдущей версии

0 голосов
/ 04 мая 2012

У меня была такая же проблема, я решил ее, изменив расширение воспроизводимого файла с .mpg на .mp4.очевидно MPMoviePlayerController ожидает правильное расширение, хотя из документации мне не ясно, что это требование:

http://developer.apple.com/library/ios/#documentation/mediaplayer/reference/MPMoviePlayerController_Class/Reference/Reference.html

Поддерживаемые форматы Этот класс воспроизводит любой фильм или аудиофайл поддерживается в iOS.Это включает в себя как потоковый контент, так и файлы фиксированной длины.Для файлов фильмов это обычно означает файлы с расширениями .mov, .mp4, .mpv и .3gp и с использованием одного из следующих стандартов сжатия:

...