MPMoviePlayerController: удаление черного экрана ± 1 сек при смене контентаURL? - PullRequest
7 голосов
/ 30 ноября 2010

Я работаю над проектом для iPad, где мне нужно плавно воспроизводить короткие видеофайлы один за другим.Для воспроизведения видео я использую MPMoviePlayerController.Проблема, с которой я сталкиваюсь, заключается в том, что, когда я звоню

[self.moviePlayer setContentURL:videoURL]

, он запускает следующее видео, но задержка черного экрана составляет ± 1 сек.видео (видео читается с диска, а не транслируется).Мне нужно избегать этого черного экрана, а также задержки.

Так что, может быть, некоторые из вас также сталкивались с этой проблемой и есть какие-то решения?Спасибо.

Кстати, сейчас, чтобы хотя бы избежать черного экрана, я фиксирую последний кадр финального видео, показываю его в UIImageView и удаляю через 1 секунду.Но я надеюсь найти более элегантное решение.

Ответы [ 4 ]

6 голосов
/ 24 июля 2011

Эффект, о котором вы говорите, на самом деле представляет собой комбинацию двух проблем: мигания черного при смене видео (что не происходит при назначении видео в первый раз) и задержка перед началом воспроизведения видео контроллером.

В настоящее время я ввернут второй и пока не знаю, как решить. Что касается первого, просто попробуйте использовать другой экземпляр MPMoviePlayerController. Я имею в виду, что когда воспроизведение видео заканчивается (вы можете подписаться на соответствующее уведомление), просто удалите старый проигрыватель, создайте новый и поместите туда видео. Таким образом, вы избежите мигания, но перед началом воспроизведения следующего видео будет задержка (не уверен, из-за загрузки видео или из-за создания плеера).

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

1 голос
/ 07 мая 2016

Старый пост, но гуглеры все равно придут.:)

Создание нового MPMoviePlayerController с последующим назначением его обратно моему предыдущему игроку сработало для меня, больше нет черного экрана!

    ...
    [self playVideoWithFilename:@"video1.mp4"];
}

- (void)playVideoWithFilename:(NSString *)fileName
{
    MPMoviePlayerController *player = [MPMoviePlayerController new];
    _myVidPlayer = player;
    player = nil;

    NSURL *vidPath = [[NSBundle mainBundle] URLForResource:fileName withExtension:nil];

    [_myVidPlayer.view setBackgroundColor:[UIColor whiteColor]];
    [_myVidPlayer.view setFrame:CGRectMake(0, 64, 320, 320)];
    [_myVidPlayer setContentURL:vidPath];
    [_myVidPlayer setControlStyle:MPMovieControlStyleNone];
    [_myVidPlayer setRepeatMode:MPMovieRepeatModeOne];
    [_myVidPlayer prepareToPlay];
    [self.view addSubview: _myVidPlayer.view];
    [_myVidPlayer play];
}

Примечание:

Доступно в iOS 2.0 и более поздних версиях. Не рекомендуется в iOS 9.0

"Использовать AVPlayerViewController в AVKit."

1 голос
/ 25 сентября 2014

Интересное решение здесь http://joris.kluivers.nl/blog/2010/01/04/mpmovieplayercontroller-handle-with-care/ вам нужно использовать [self.moviePlayer prepareToPlay]; и перехватить MPMoviePlayerReadyForDisplayDidChangeNotification для использования [self.moviePlayer play];

0 голосов
/ 30 ноября 2010

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

...