Я разрабатываю приложение для iPhone, которое должно воспроизводить видео. На данный момент я узнал, что для этого существует как минимум два API; AVPlayer
и MPMoviePlayerController
.
Какие основные отличия?
Я разрабатываю приложение для iPhone, которое должно воспроизводить видео. На данный момент я узнал, что для этого существует как минимум два API; AVPlayer
и MPMoviePlayerController
.
Какие основные отличия?
Ответы:
ПРИМЕЧАНИЕ. Начиная с iOS9, Apple не поддерживает MPMoviePlayerController:
Скопировано из справочника MPMoviePlayerController .
AVPlayer
AVPlayer
дает вам гораздо больше гибкости, но довольно плохо документирован. Использование этого API заставит вас создать собственный пользовательский интерфейс.AVFoundation
(Фреймворк, который вас подводитAVPlayer
), как правило, немного сложен для пользователя (кодировщика), так как вынуждает вас часто использовать Key-Value Observing для проверки состояний. Концепция KVO великолепна, не поймите меня неправильно - тем не менее, для неопытных разработчиков это может быть болезненно изучать. Apple иногда пропускает информацию о том, какие свойства действительно соответствуют KVO, и это заставит вас поэкспериментировать.Одним из больших преимуществ
AVPlayer
overMPMoviePlayerController
будет, например, его расширенная версия, такAVQueuePlayer
как она может воспроизводить без пауз с нескольких источников фильмов. Еще одним преимуществом, безусловно, является многофункциональнаяAVFoundation
структура, позволяющая делать такие вещи, как создание, кодирование и преобразование фильмов на лету.Еще одним огромным преимуществом
AVPlayer
является то, что вы можете одновременно воспроизводить несколько источников видео (например, бок о бок) без каких-либо проблем.MPMoviePlayerController
MPMoviePlayerController
прост в использовании и покрывает большинство потребностей сразу после установки. Использование этого API даст вам красивый и понятный пользовательский интерфейс. Однако пользовательский интерфейс можно отключить или заменить на собственный.Для изменения статуса
MPMoviePlayerController
используется несколько,NSNotifications
охватывающих все, что нужно обычному приложению.Под капотом
MPMoviePlayerController
строится поверхAVPlayer
- но на самом деле это происходит полностью прозрачно для пользователя - у вас нет доступа к этому слою во время использованияMPMoviePlayerController
.MPMoviePlayerController
использует основуAVPlayer
как единичный экземпляр, поэтому невозможно использовать несколько экземпляровMPMoviePlayerController
для одновременного воспроизведения видео.С другой стороны, как только вы пытаетесь расширить функциональность
MPMoviePlayerController
с помощью своих собственных функций, код быстро становится неприятным - например, вы, возможно, начнете использовать несколько таймеров для покрытия таких вещей, как правильное обнаружение голода (на самом деле, эта функция включена в версию этого класса для iOS5), пользовательские обновления пользовательского интерфейса ... Или у вас может оказаться больше нескольких свойств состояния, пытающихся охватить такие вещи, как изящное прерывание воспроизведения, пока проигрыватель все еще выполняет предварительную буферизацию.Личная рекомендация
Я использовал оба и буду продолжать использовать оба, в зависимости от потребностей приложения, которое я создаю с удовольствием. Для большинства (простых) проектов я бы рекомендовал использовать
MPMoviePlayerController
over, такAVPlayer
как он очень прост в использовании и с помощью всего нескольких строк кода вы получаете полноценный медиаплеер. И если ваши требования к воспроизведению мультимедиа еще проще, взгляните наMPMoviePlayerViewController
(обратите внимание, что View-part).источник
backgroundView
.