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:
Skopiowano z referencji MPMoviePlayerController .
AVPlayer
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ę dostarczaAVPlayer
) 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
ponadMPMoviePlayerController
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 funkcjeAVFoundation
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
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 kilkuNSNotifications
obejmujących wszystko, czego potrzebuje zwykła aplikacja.Pod maską,
MPMoviePlayerController
buduje się na wierzchuAVPlayer
- ale w rzeczywistości dzieje się to całkowicie niewidoczne dla użytkownika - nie masz dostępu do tej warstwy podczas używaniaMPMoviePlayerController
.MPMoviePlayerController
używa podkładaniaAVPlayer
jako pojedynczej instancji, dlatego nie jest możliwe jednoczesne używanie wielu instancji programuMPMoviePlayerController
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 naMPMoviePlayerViewController
(zwróć uwagę na tę część dotyczącą widoku).źródło
backgroundView
.