iPhone - MPMoviePlayerController определяет, когда воспроизведение прекращено и когда запущено - PullRequest
2 голосов
/ 14 августа 2011

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

Я использую следующий код для запуска проигрывателя:

self.avPlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:audioURL]];
[self.avPlayer.moviePlayer setShouldAutoplay:YES];
[self.avPlayer.moviePlayer prepareToPlay];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerPlayStateChanged:) name:MPMoviePlayerPlaybackStateDidChangeNotification object:nil];       

Когда начинается воспроизведение, я получаюуведомление.Но если по какой-то причине Wi-Fi работает медленно или недоступен, возможно, проигрыватель воспроизводится в потоковом режиме, и я не получаю никаких уведомлений.Почему я не получаю уведомления во время потоковой передачи видео?

Также, когда видео идет в середине, проигрыватель останавливается и выдает «готовое» уведомление.Как предотвратить его остановку во время потоковой передачи .....

1 Ответ

4 голосов
/ 14 августа 2011

Прежде всего, я думаю, вы должны указать свойство movieSourceType:

self.avPlayer.moviePlayer.movieSourceType = MPMovieSourceTypeStreaming;

Теперь об уведомлениях

  • Во-первых, почему бы и нетпроверьте свойство playbackState до и после, чтобы увидеть, почему было вызвано уведомление, когда и если оно вызывается.
  • Может быть, даже более надежный индикатор, так как это, похоже, проблемы с соединением, - это обработка MPMoviePlayerLoadStateDidChangeNotification и проверьте свойство loadState (например, в уведомлении для PlaybackStateChanged отсутствует словарь userinfo, поэтому вы должны прочитать его через свойство loadState).
  • Наконец, для MPMoviePlayerPlaybackDidFinishNotification Я получаю сбой во время потоковой передачи. Я предполагаю, что произошла какая-то ошибка, так как другие варианты - фильм подошел к концу или пользователь сам остановил фильм.Опять же, вы можете проверить, почему было вызвано уведомление, прочитав константу MPMovieFinishReason, которая передается в качестве ключа в параметре словаря userinfo для уведомления.
...