Я розробляю програму для 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), оновлення користувацького інтерфейсу, ... Або в кінцевому підсумку у вас може бути більше декількох властивостей стану, які намагаються охопити такі речі, як витончені переривання відтворення, поки програвач все ще попередньо буферизується.
Особиста рекомендація
Я використовував обидва, і надалі використовуватиму обидва, залежно від потреб програми, яку я маю задоволення створювати. Для більшості (простих) проектів я б рекомендував використовувати MPMoviePlayerControllerover, AVPlayerоскільки він дуже простий у використанні, і лише за допомогою декількох рядків коду ви отримуєте повноцінний медіаплеєр. І якщо ваші вимоги до відтворення мультимедіа ще простіші, загляньте MPMoviePlayerViewController(зверніть увагу на View-part).
backgroundView.