Установите ContentURL для MPMoviePlayerController дважды - PullRequest
3 голосов
/ 22 марта 2011

Я создаю встроенный MPMoviePlayerController, таким образом, в моем методе loadView:

self.moviePlayerController = [[[MPMoviePlayerController alloc] init] autorelease];

// add to view, setup moviePlayerController's view frame, etc

И позже я могу загрузить фильм, который выбирает пользователь, таким образом:

NSURL *fileUrl = ...
self.moviePlayerController.contentURL = fileUrl;

, и все отлично работает.

Однако, если я снова установлю contentURL:

NSURL * fileUrl2 = ... self.moviePlayerController.contentURL = fileUrl2;

Это не работает, даже если fileUrl2 == fileUrl1.

Когда я изменяю contentURL, я получаю следующие translationState и loadState:

После первого setContentURL:

loadState == playable |playthroughOK

PlayState == Воспроизведение

После моего второго setContentURL:

PlayState == остановлено

loadState == неизвестно

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

Спасибо!

Ответы [ 2 ]

9 голосов
/ 22 марта 2011

В моей первоначальной версии я разрешал воспроизведение фильмов только через встроенные элементы управления. Если я принудительно начал воспроизведение фильма сразу после установки contentURL, все работало нормально:

self.moviePlayerController.contentURL = fileUrl;
[self.moviePlayerController play];

Однако, это не то поведение, которое я хотел. Я обнаружил, что когда

-[MPMoviePlayerController play]

называется,

-[MPMoviePlayerController prepareToPlay]

вызывается автоматически. Очевидно, что prepareToPlay должен быть вызван для показа встроенных элементов управления и начального кадра фильма. Кажется, он вызывается автоматически при первом вызове setContentURL.

Итак, я просто изменил свой вызов setContentURL на следующий, и все заработало.

self.moviePlayerController.contentURL = fileUrl;
[self.moviePlayerController prepareToPlay];
1 голос
/ 22 марта 2011

Документация для свойства contentURL гласит следующее:

Если вы установите это свойство во время воспроизведения фильма, этот фильм приостанавливается, и новый фильм начинает загружаться. Новый фильм начинает воспроизводиться с самого начала.

Так что вы испытываете не ожидаемое поведение. Вы можете получить и проверить журнал ошибок для MPMoviePlayerController, используя его свойство errorLog.

...