Почему MPMoviePlayerController работает в симуляторе, а не на устройстве?

У меня не получается заставить MPMoviePlayerController работать на устройстве. Он отлично работает в симуляторе, воспроизводит пятисекундное видео, а затем отправляет соответствующий обратный вызов (myMovieFinishedCallback:) в контроллер представления. Когда он запускается на устройстве, фильм никогда не появляется, хотя я могу проследить [player play] без проблем. myMovieFinishedCallback: никогда не вызывается, и ошибок нет. Все нужные ресурсы копируются. Есть идеи, что происходит?

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

Обновление: я перешел на использование MPMoviePlayerViewController. На устройстве фильм все равно не воспроизводится, у меня просто бесконечно крутится колесо прогресса. Элементы управления также кратковременно мигают, несмотря на то, что я установил проигрыватель на MPMovieControlStyleNone — кто-нибудь знает, как я могу это исправить? Фильм длится пять секунд и весит около 1,5 МБ, если это имеет какое-то значение.

Обновление: другие файлы фильмов работают, но я не могу понять, как заставить работать мой. Я пробовал его как .mov и .mp4, и настройки кажутся правильными. Любая идея, что заставит MPMoviePlayer всегда показывать колесо прогресса только на устройстве?

- (void) playMovie
{
    NSString *url = [[NSBundle mainBundle] 
                     pathForResource:@"myMovie" 
                     ofType:@"mp4"];

MPMoviePlayerViewController *playerViewController = 
[[MPMoviePlayerViewController alloc] 
 initWithContentURL:[NSURL fileURLWithPath:url]];

playerViewController.moviePlayer.controlStyle = MPMovieControlStyleNone;
playerViewController.moviePlayer.scalingMode = MPMovieScalingModeFill;

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

playerViewController.view.frame = movieView.frame;

[movieView addSubview:playerViewController.view];

//---play movie---
MPMoviePlayerController *player = [playerViewController moviePlayer];
[player play];
}   

person Luke    schedule 11.08.2010    source источник
comment
использовать MPMoviePlayerViewController   -  person Daniel    schedule 12.08.2010
comment
Я переключился на MPMoviePlayerViewController. Все равно не повезло.   -  person Luke    schedule 12.08.2010


Ответы (1)


Ваш код отлично работает для меня, поэтому есть две возможности, которые приходят на ум (могут быть и другие):

  1. Ваш movieView не был должным образом инициализирован или его кадр не установлен так, чтобы он был виден.
  2. Формат видео, которое вы показываете, не поддерживается на устройстве.

Я бы попробовал использовать другое видео. Может быть, вы можете подтвердить, что играли на устройстве раньше. Вот небольшой демонстрационный проект, который я собрал: http://www.cimgf.com/files/PlayMovie.zip

person Matt Long    schedule 12.08.2010
comment
Это очень помогло — ваше видео с американскими горками работает. Я пытался возиться с настройками видео, которое я использую, но все равно не повезло. У кого-нибудь была похожая проблема с MPMoviePlayer? - person Luke; 13.08.2010
comment
Я предлагаю вам начать новый вопрос о форматах и ​​MPMoviePlayer. Название этого вопроса не обязательно привлечет внимание людей, которые разбираются в форматах. Еще одна мысль. Если вы используете iOS 4, пробовали ли вы использовать классы AVFoundation. AVPlayer и AVPlayerLayer позволяют отображать видео в слое Core Animation. - person Matt Long; 13.08.2010
comment
Я не в iOS 4, потому что мы на iPad. Могу я спросить, как вы сняли этот фильм о американских горках? Мы пробовали множество различных конвертеров, и все равно не повезло. - person Luke; 13.08.2010
comment
На самом деле это фильм, который Apple использовала для включения в новую установку OS X. Я скопировал его между обновлениями версии только для тестирования. Я больше ничего об этом не знаю. Если вы откроете его в QuickTime Player, вы можете получить информацию о видеофайле, чтобы увидеть определенные сведения о нем. - person Matt Long; 13.08.2010
comment
На самом деле только что заметил, что он все еще там. Посмотрите в /System/Library/Compositions, и вы увидите несколько файлов .mov в том же формате. - person Matt Long; 13.08.2010
comment
вы используете ios4, но не регистрируетесь в // Зарегистрируйте, что состояние загрузки изменилось (фильм готов) [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerLoadStateChanged:) name:MPMoviePlayerLoadStateDidChangeNotification object:nil]; зарегистрируйтесь, чтобы знать, звонит он или нет. - person ; 23.08.2010
comment
@Matt Long Я создал AVPlayer и добавил его в AVPlayerLayer, но слышен только звук, но нет видео... любой ответ NSString *path = [[NSBundle mainBundle] pathForResource:@Mto ofType:@mov inDirectory:nil]; NSURL *movieURL = [URL-файла NSURLWithPath:путь]; player = [[AVPlayer alloc] initWithURL:movieURL]; playerLayer = [AVPlayerLayer playerLayerWithPlayer:player]; [[self.view.layer superlayer] addSublayer:playerLayer]; если (playerLayer.readyForDisplay) { NSLog(@Ready); } [игрок играет]; - person ; 25.08.2010