Подтвердить что ты не робот

MPMoviePlayerController показывает черный пустой экран

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

4b9b3361

Ответ 1

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

Ответ 2

Вам нужно сохранить свой экземпляр MPMoviePlayerController i.e в качестве свойства или переменной экземпляра. Ссылка на проигрывателя проиграна, если вы не сохранили его.

Ответ 3

Вы можете попробовать поставить [itemMoviePlayerController prepareToPlay]; перед [itemMoviePlayerController play];

Способ, которым Apple предпочитает отображать только полноэкранное видео, - это представить модальный MPMoviePlayerViewController (как сказал Холланс). Чтобы представить его, вы должны использовать что-то вроде:

 moviePlayerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:fileURL];
 [self presentMoviePlayerViewControllerAnimated:moviePlayerViewController];
 [itemMoviePlayerController play];

Это задокументировано Apple здесь

Вы можете прочитать там, что вы должны хранить ссылку на свой MPMoviePlayerViewController, чтобы позже ее отклонить с помощью

[self dismissMoviePlayerViewControllerAnimated:moviePlayerViewController].

Ответ 4

Я исправил это, поставив

@property (strong, nonatomic) MPMoviePlayerController *moviePlayer; 

в моем .h файле и вызывая self.moviePlayer во всем моем коде, и он сработает!

Ответ 5

Вместо этого вам нужно использовать MPMoviePlayerViewController. Обратите внимание на слово "Вид".

Ответ 6

Надеюсь, это поможет. Я решил эту проблему в своем проекте

 -(void)startPlayingMovie
{
    NSLog(@"startPlayingMovie");
    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                         pathForResource:@"Start_video" ofType:@"mov"]];
    moviePlayer =  [[MPMoviePlayerViewController alloc]
                    initWithContentURL:url];
    moviePlayer.view.frame = CGRectMake(0, 0, self.view.bounds.size.height, self.view.bounds.size.width);
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(moviePlayBackDidFinish:)
                                                 name:MPMoviePlayerPlaybackDidFinishNotification
                                               object:moviePlayer.moviePlayer];

moviePlayer.moviePlayer.controlStyle = MPMovieControlStyleNone;
moviePlayer.moviePlayer.shouldAutoplay = YES;
[self presentMoviePlayerViewControllerAnimated:moviePlayer];
[moviePlayer.moviePlayer setFullscreen:YES animated:NO];

NSLog(@"endPlayingMovie");

}

Ответ 7

То же самое случилось со мной. Оказывается, я пытался воспроизвести фильм, пока UIImagePicker еще не был уволен.

В моем UIImagePickerDelegate мне пришлось сначала отпустить всплывающее окно UIImagePicker, а затем открыть ViewController управление MPMediaPlayerController:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)infoDict
{
    //the first thing to do: dismiss the media picker
    if ([ipPop isPopoverVisible])
    {
        [ipPop dismissPopoverAnimated:ANIMATION_SETTING];
    }

    myMediaPlayerViewController * playerVC = [[myMediaPlayerViewController alloc] initWithMediaDict:infoDict];
    [self.navigationController pushViewController:playerVC animated:ANIMATION_SETTING];
}

Ответ 8

У меня была такая же проблема, и это сошло с ума. Он будет работать на одном контроллере представления отлично (аудио и видео), но не работает на другом (черный экран с просто аудио). В конце концов, все, что я сделал, это ИЗМЕНЕНИЕ ЗАКАЗА вызовов: я просто ждал, пока не закончил настройку проигрывателя, прежде чем добавлять его в представление. Другими словами, я вызывал "addSubview" на линии перед вызовом "играть".

Ответ 9

Это код, который я использую для воспроизведения файла по URL-адресу:

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

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

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

Ответ 10

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

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

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

Ответ 11

вы должны сделать это с помощью 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];

}

Ответ 12

У меня была аналогичная проблема. После воспроизведения появляется пустой экран, который не позволяет мне снова воспроизводить видео. Хорошо, вот моя работа. Эта кнопка воспроизведения не исчезает.

[self.movieController stop]; 
[self.movieController prepareToPlay];
[self.movieController pause];

Ответ 13

Кроме того, если вы используете URL-адреса http, убедитесь, что вы отключили приложение Transport Security в своих проектах *. plist. Это также вызовет черный экран.

Добавьте следующий код:

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>

Здесь:

   [INSERT CODE ABOVE HERE]
  </dict>
</plist>
----- BOTTOM OF PLIST FILE