Tworzę aplikację na iPhone'a, która musi odtwarzać filmy. Jak dotąd dowiedziałem się, że są co najmniej dwa API do osiągnięcia tego; AVPlayer
i MPMoviePlayerController
.
Jakie są główne różnice?
Tworzę aplikację na iPhone'a, która musi odtwarzać filmy. Jak dotąd dowiedziałem się, że są co najmniej dwa API do osiągnięcia tego; AVPlayer
i MPMoviePlayerController
.
Jakie są główne różnice?
Odpowiedzi:
UWAGA od iOS9 firma Apple wycofała MPMoviePlayerController:
Klasa MPMoviePlayerController jest formalnie przestarzała w systemie iOS 9. (Klasa MPMoviePlayerViewController również jest formalnie przestarzała). Aby odtwarzać zawartość wideo w systemie iOS 9 i nowszych, zamiast tego użyj klasy AVPictureInPictureController lub AVPlayerViewController ze środowiska AVKit albo klasy WKWebView z WebKit.
Skopiowano z referencji MPMoviePlayerController .
AVPlayer
daje dużo większą elastyczność, ale jest dość słabo udokumentowany. Korzystanie z tego interfejsu API zmusi Cię do stworzenia własnego interfejsu użytkownika. AVFoundation
(framework, który cię dostarcza AVPlayer
) generalnie jest trochę trudny dla użytkownika (programisty), ponieważ zmusza cię do używania obserwowania kluczowych wartości do sprawdzania stanów. Koncepcja KVO jest świetna, nie zrozumcie mnie źle - jednak dla niedoświadczonych programistów nauka może być bolesna. Apple czasami pomija informacje o tym, które właściwości są w rzeczywistości zgodne z KVO, co zmusi Cię do przeprowadzenia pewnych eksperymentów.
Dużą zaletą AVPlayer
ponad MPMoviePlayerController
byłoby na przykład jego rozszerzoną wersję, AVQueuePlayer
ponieważ umożliwia ona odtwarzanie bez przerw z wielu źródeł filmowych. Inną zaletą jest z pewnością bogata w funkcje AVFoundation
struktura, która pozwala na takie rzeczy, jak kompozycja / kodowanie / konwersja filmu w locie.
Kolejną ogromną zaletą programu AVPlayer
jest fakt, że można bez problemu odtwarzać jednocześnie wiele źródeł wideo (np. Obok siebie).
MPMoviePlayerController
jest łatwy w użyciu i zaspokaja większość potrzeb po wyjęciu z pudełka. Korzystanie z tego interfejsu API zapewni dobrze wyglądający i powszechnie zrozumiały interfejs użytkownika. Interfejs użytkownika można jednak wyłączyć i zastąpić niestandardowym.
W przypadku zmian statusu MPMoviePlayerController
używa kilku NSNotifications
obejmujących wszystko, czego potrzebuje zwykła aplikacja.
Pod maską, MPMoviePlayerController
buduje się na wierzchu AVPlayer
- ale w rzeczywistości dzieje się to całkowicie niewidoczne dla użytkownika - nie masz dostępu do tej warstwy podczas używania MPMoviePlayerController
.
MPMoviePlayerController
używa podkładania AVPlayer
jako pojedynczej instancji, dlatego nie jest możliwe jednoczesne używanie wielu instancji programu MPMoviePlayerController
do odtwarzania wideo.
Z drugiej strony, gdy tylko spróbujesz rozszerzyć funkcjonalność o MPMoviePlayerController
własne funkcje, kod szybko stanie się nieprzyjemny - np. Prawdopodobnie zaczniesz używać wielu timerów do pokrycia rzeczy takich jak prawidłowe wykrywanie głodu (w rzeczywistości ta funkcja została dołączona do wersji tej klasy na iOS5), niestandardowe aktualizacje interfejsu użytkownika, ... Lub możesz skończyć mając więcej niż kilka właściwości stanu, próbujących pokryć takie rzeczy, jak wdzięczne przerwanie odtwarzania, podczas gdy odtwarzacz nadal buforuje.
Osobista rekomendacja
Korzystałem z obu i nadal będę korzystać z obu, w zależności od potrzeb aplikacji, którą mam przyjemność zbudować. W przypadku większości (prostych) projektów polecałbym użycie MPMoviePlayerController
over, AVPlayer
ponieważ jest bardzo prosty w użyciu i wystarczy kilka wierszy kodu, aby uzyskać pełnoprawny odtwarzacz multimedialny. A jeśli Twoje wymagania dotyczące odtwarzania multimediów są jeszcze prostsze, rzuć okiem na MPMoviePlayerViewController
(zwróć uwagę na tę część dotyczącą widoku).
backgroundView
.