Я розробляю програму для iPhone, яка потребує відтворення відео. Наразі я дізнався, що для досягнення цього існує принаймні два API; AVPlayer
і MPMoviePlayerController
.
Які основні відмінності?
Я розробляю програму для iPhone, яка потребує відтворення відео. Наразі я дізнався, що для досягнення цього існує принаймні два API; AVPlayer
і MPMoviePlayerController
.
Які основні відмінності?
Відповіді:
ПРИМІТКА . Починаючи з iOS9, Apple припинила роботу MPMoviePlayerController:
Клас MPMoviePlayerController формально застарілий у iOS 9. (Клас MPMoviePlayerViewController також офіційно застарілий.) Для відтворення відеовмісту в iOS 9 і пізніших версіях замість цього використовуйте AVPictureInPictureController або AVPlayerViewController з класу AVKit WebV або WK з веб-класу.
Скопійовано з посилання на MPMoviePlayerController .
AVPlayer
надає вам набагато більше гнучкості, але досить погано задокументовано. Використання цього API змусить вас створити власний інтерфейс. AVFoundation
(фреймворк, який приносить вам AVPlayer
), як правило, трохи важкий для користувача (кодера), оскільки він змушує вас використовувати спостереження за ключовими значеннями для перевірки станів. Концепція KVO чудова, не розумійте мене неправильно - все ж для недосвідчених розробників може бути боляче вчитися. Apple іноді опускає інформацію про те, які властивості насправді відповідають KVO, і це змусить вас провести деякі експерименти.
Однією з великих переваг AVPlayer
над MPMoviePlayerController
, наприклад, може бути розширена версія, AVQueuePlayer
оскільки вона може виконувати безперервне відтворення декількох джерел фільмів. Ще однією перевагою, безумовно, є багатофункціональний AVFoundation
фреймворк, що дозволяє вам робити такі речі, як на льоту композиція фільму / кодування / конвертація.
Ще однією величезною перевагою AVPlayer
є той факт, що ви можете насправді одночасно відтворювати кілька джерел відеосигналу (наприклад, поруч) без будь-яких проблем.
MPMoviePlayerController
проста у використанні та охоплює більшість потреб нестандартно. Використання цього API дасть вам гарний і загально зрозумілий інтерфейс. Однак користувальницький інтерфейс можна вимкнути або замінити користувацьким.
Для змін статусу MPMoviePlayerController
використовується кілька, що NSNotifications
охоплюють усе, що потрібно звичайній програмі.
Під капотом MPMoviePlayerController
будується поверх AVPlayer
- але це насправді відбувається абсолютно прозоро для користувача - ви не маєте доступу до цього шару під час використання MPMoviePlayerController
.
MPMoviePlayerController
використовує підкладку AVPlayer
як одиночний екземпляр, отже, неможливо використовувати кілька екземплярів MPMoviePlayerController
для одночасного відтворення відео.
З іншого боку, як тільки ви намагаєтеся розширити функціональність MPMoviePlayerController
своїх власних функцій, код швидко стає неприємним - наприклад, ви, можливо, почнете використовувати кілька таймерів для охоплення таких речей, як належне виявлення голоду (насправді ця функція включена у версію цього класу для iOS5), оновлення користувацького інтерфейсу, ... Або в кінцевому підсумку у вас може бути більше декількох властивостей стану, які намагаються охопити такі речі, як витончені переривання відтворення, поки програвач все ще попередньо буферизується.
Особиста рекомендація
Я використовував обидва, і надалі використовуватиму обидва, залежно від потреб програми, яку я маю задоволення створювати. Для більшості (простих) проектів я б рекомендував використовувати MPMoviePlayerController
over, AVPlayer
оскільки він дуже простий у використанні, і лише за допомогою декількох рядків коду ви отримуєте повноцінний медіаплеєр. І якщо ваші вимоги до відтворення мультимедіа ще простіші, загляньте MPMoviePlayerViewController
(зверніть увагу на View-part).
backgroundView
.