MPMoviePlayerController отправляет «достигнут конец фильма» при изменении URL - PullRequest
9 голосов
/ 15 ноября 2011

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

Как и в документации, я зарегистрировался для MPMoviePlayerPlaybackDidFinishNotification и проверил, содержит ли ключ MPMovieFinishReason intValue MPMovieFinishReasonPlaybackEnded. Это работает нормально.

Но я получаю то же уведомление с MPMovieFinishReasonPlaybackEnded, когда я переключаю фильм с помощью свойства contentURL до того, как он действительно достигнет своего конца. Поэтому я попробовал это решение и проверил, является ли endPlaybackTime == -1, но это верно в обоих случаях.

Единственный обходной путь, который я нашел до сих пор, - это удалить наблюдателя перед изменением contentURL и затем добавить его снова, но я думаю, что должно быть более элегантное решение?

Ответы [ 2 ]

0 голосов
/ 08 июля 2012

Похоже, что он работает последовательно, просто удаляяObserver, останавливая воспроизведение / изменяя URL, затем добавляя еще раз.

0 голосов
/ 04 мая 2012

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

В качестве альтернативы, как насчет хранения URL фильма (ов), который вы играете и сравниваете с [moviePlayer contentURL]? Возможно, вам придется заняться акробатикой по таймеру и иметь currentMovieURL и previousMovieURL, но это должно обеспечить хороший способ сравнения, если фильм, который закончился, - это фильм, который вы ожидали закончить.

В качестве альтернативы , что , как насчет установки 2 переменных: movieStartTime и expectedMovieDuration? Затем вы можете сравнить [NSDate date] с [movieStartTime dateByAddingTimeInterval:expectedMovieDuration] и посмотреть, далеко ли это.

...