Различия между AVPlayer и MPMoviePlayerController [закрыто]

87

Я разрабатываю приложение для iPhone, которое должно воспроизводить видео. На данный момент я узнал, что для этого существует как минимум два API; AVPlayerи MPMoviePlayerController.

Какие основные отличия?

suse
источник
4
Пытался перефразировать этот вопрос, чтобы убедиться, что он не дает основанных на мнении ответов.
до

Ответы:

173

ПРИМЕЧАНИЕ. Начиная с iOS9, Apple не поддерживает MPMoviePlayerController:

Класс MPMoviePlayerController официально объявлен устаревшим в iOS 9. (Класс MPMoviePlayerViewController также официально объявлен устаревшим.) Для воспроизведения видеоконтента в iOS 9 и более поздних версиях вместо этого используйте класс AVPictureInPictureController или AVPlayerViewController из инфраструктуры AVKit или класс WKWebView из WebKit.

Скопировано из справочника MPMoviePlayerController .

AVPlayer

AVPlayerдает вам гораздо больше гибкости, но довольно плохо документирован. Использование этого API заставит вас создать собственный пользовательский интерфейс. AVFoundation(Фреймворк, который вас подводит AVPlayer), как правило, немного сложен для пользователя (кодировщика), так как вынуждает вас часто использовать Key-Value Observing для проверки состояний. Концепция KVO великолепна, не поймите меня неправильно - тем не менее, для неопытных разработчиков это может быть болезненно изучать. Apple иногда пропускает информацию о том, какие свойства действительно соответствуют KVO, и это заставит вас поэкспериментировать.

Одним из больших преимуществ AVPlayerover MPMoviePlayerControllerбудет, например, его расширенная версия, так AVQueuePlayerкак она может воспроизводить без пауз с нескольких источников фильмов. Еще одним преимуществом, безусловно, является многофункциональная AVFoundationструктура, позволяющая делать такие вещи, как создание, кодирование и преобразование фильмов на лету.

Еще одним огромным преимуществом AVPlayerявляется то, что вы можете одновременно воспроизводить несколько источников видео (например, бок о бок) без каких-либо проблем.

MPMoviePlayerController

MPMoviePlayerControllerпрост в использовании и покрывает большинство потребностей сразу после установки. Использование этого API даст вам красивый и понятный пользовательский интерфейс. Однако пользовательский интерфейс можно отключить или заменить на собственный.

Для изменения статуса MPMoviePlayerControllerиспользуется несколько, NSNotificationsохватывающих все, что нужно обычному приложению.

Под капотом MPMoviePlayerControllerстроится поверх AVPlayer- но на самом деле это происходит полностью прозрачно для пользователя - у вас нет доступа к этому слою во время использования MPMoviePlayerController.

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

С другой стороны, как только вы пытаетесь расширить функциональность MPMoviePlayerControllerс помощью своих собственных функций, код быстро становится неприятным - например, вы, возможно, начнете использовать несколько таймеров для покрытия таких вещей, как правильное обнаружение голода (на самом деле, эта функция включена в версию этого класса для iOS5), пользовательские обновления пользовательского интерфейса ... Или у вас может оказаться больше нескольких свойств состояния, пытающихся охватить такие вещи, как изящное прерывание воспроизведения, пока проигрыватель все еще выполняет предварительную буферизацию.


Личная рекомендация

Я использовал оба и буду продолжать использовать оба, в зависимости от потребностей приложения, которое я создаю с удовольствием. Для большинства (простых) проектов я бы рекомендовал использовать MPMoviePlayerControllerover, так AVPlayerкак он очень прост в использовании и с помощью всего нескольких строк кода вы получаете полноценный медиаплеер. И если ваши требования к воспроизведению мультимедиа еще проще, взгляните на MPMoviePlayerViewController(обратите внимание, что View-part).

До
источник
2
AVPlayer также автоматически позволяет использовать анимацию слоев. Если вы хотите запускать Core Animation в фоновом режиме, не используйте MPMoviePlayerController, хотя у него может быть параметр для их включения, просто имейте в виду, если вы используете материал CALayer
Стивен Дж.
3
Нет. Ответ правильный. Пользовательский интерфейс MPMoviePlayerController можно отключить или заменить на настраиваемый.
Дэйв Баттон,
1
@Besi нет, совершенно правильно, как написано - его определенно можно отключить (с помощью MPMovieControlStyleNone) и, следовательно, заменить, так как ничто не мешает вам добавить свое собственное представление в качестве родственного вида представления MPMoviePlayerController или непосредственно на нем backgroundView.
до
8
Начиная с iOS 9, MPMoviePlayerController устарел, поэтому вам следует использовать AVPlayer для будущих проектов
Льюис,
1
Это очень ценная информация @ lewis42 - добавлю ее в свой древний пост :)
До