Відмінності AVPlayer та MPMoviePlayerController [закрито]


87

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

Які основні відмінності?


4
Спробував переформулювати це запитання, щоб переконатися, що воно не дає відповідей на основі думок.
До

Відповіді:


173

ПРИМІТКА . Починаючи з iOS9, Apple припинила роботу MPMoviePlayerController:

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

Скопійовано з посилання на MPMoviePlayerController .

AVPlayer

AVPlayerнадає вам набагато більше гнучкості, але досить погано задокументовано. Використання цього API змусить вас створити власний інтерфейс. AVFoundation(фреймворк, який приносить вам AVPlayer), як правило, трохи важкий для користувача (кодера), оскільки він змушує вас використовувати спостереження за ключовими значеннями для перевірки станів. Концепція KVO чудова, не розумійте мене неправильно - все ж для недосвідчених розробників може бути боляче вчитися. Apple іноді опускає інформацію про те, які властивості насправді відповідають KVO, і це змусить вас провести деякі експерименти.

Однією з великих переваг AVPlayerнад 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 можна відключити або замінити на власний.
Dave Batton

1
@Besi ні, цілком правильний, як написано - його однозначно можна відключити (за допомогою MPMovieControlStyleNone) і, отже, замінити, оскільки ніщо не заважає вам додати власний погляд як брата або сестру подання MPMoviePlayerController або безпосередньо на його backgroundView.
До

8
Станом на iOS 9 MPMoviePlayerController застарілий, тому вам слід використовувати AVPlayer для майбутніх проектів
Льюїс,

1
Це надзвичайно цінна інформація @ lewis42 - додасть її до моєї давньої публікації :)
До
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.