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