Vraag Verschillen tussen AVPlayer en MPMoviePlayerController [gesloten]


Ik ben bezig met het ontwikkelen van een iPhone-applicatie die video's moet afspelen. Tot nu toe heb ik geleerd dat er ten minste twee API's zijn om dit te bereiken; AVPlayer en MPMoviePlayerController.

Wat zijn de belangrijkste verschillen?


86
2017-11-16 04:57


oorsprong


antwoorden:


NOTITIE Vanaf iOS9 heeft Apple de MPMoviePlayerController beëindigd:

De MPMoviePlayerController-klasse is formeel verouderd in iOS 9. (De klasse MPMoviePlayerViewController is ook formeel verouderd.) Gebruik in plaats daarvan de klasse AVPictureInPictureController of AVPlayerViewController van het AVKit-framework of de WKWebView-klasse van WebKit om video-inhoud af te spelen op iOS 9 en hoger.

Gekopieerd van de MPMoviePlayerController-referentie.

AVPlayer

AVPlayer geeft je veel meer flexibiliteit, maar is behoorlijk slecht gedocumenteerd. Het gebruik van deze API dwingt je om je eigen gebruikersinterface te maken. AVFoundation (het raamwerk dat je brengt AVPlayer) is over het algemeen een beetje moeilijk voor de gebruiker (codeur) omdat het je dwingt om te gebruiken Key-Value Observing veel voor het controleren van staten. Het concept van KVO is geweldig, begrijp me niet verkeerd - nog steeds, voor onervaren ontwikkelaars kan het pijnlijk zijn om te leren. Apple laat soms de informatie weg over welke eigenschappen KVO-conform zijn en dat dwingt je tot wat experimenten.

Een groot voordeel van AVPlayer over- MPMoviePlayerController zou bijvoorbeeld de uitgebreide versie zijn, AVQueuePlayer zoals die in staat is om een ​​gapless weergave van meerdere filmbronnen te doen. Een ander voordeel is zeker de functie rijk AVFoundation framework waarmee u dingen kunt doen zoals on-the-fly filmen / coderen / converteren.

Nog een ander groot voordeel van AVPlayer is het feit dat je meerdere videobronnen tegelijkertijd (zij aan zij) kunt spelen zonder enig probleem.

MPMoviePlayerController

MPMoviePlayerController is gemakkelijk te gebruiken en biedt de meeste behoeften uit de doos. Het gebruik van deze API geeft je een goed uitziende en algemeen begrepen gebruikersinterface. De gebruikersinterface kan echter worden uitgeschakeld en / of vervangen door een aangepaste interface.

Voor statuswijzigingen, MPMoviePlayerController gebruikt een paar NSNotifications over alles wat de reguliere app nodig heeft.

Onder de motorkap, MPMoviePlayerController bouwt voort op AVPlayer - maar dat gebeurt eigenlijk volledig transparant voor de gebruiker - je hebt geen toegang tot die laag tijdens het gebruik MPMoviePlayerController.

MPMoviePlayerController gebruikt de underlaying AVPlayer als een singleton instantie, dus het is niet mogelijk om meerdere exemplaren van te gebruiken MPMoviePlayerController om video's tegelijkertijd af te spelen.

Aan de andere kant, zodra u de functionaliteit van probeert uit te breiden MPMoviePlayerController met uw eigen kenmerken, code wordt snel vervelende - bijv. je zult mogelijk meerdere timers gaan gebruiken om zaken als een goede hongerdetectie te dekken (eigenlijk is die functie opgenomen in iOS5's versie van deze klasse), aangepaste UI-updates, ... Of je hebt misschien meer dan een handjevol toestanden eigenschappen die dingen proberen te verbergen zoals sierlijk afbreken van het afspelen terwijl de speler nog steeds buffert.


Persoonlijke aanbeveling

Ik heb beide gebruikt en ik zal beide blijven gebruiken, afhankelijk van de behoeften van de app die ik met plezier heb opgebouwd. Voor de meeste (eenvoudige) projecten zou ik aanraden om te gebruiken MPMoviePlayerController over- AVPlayer omdat het heel eenvoudig te gebruiken is en met slechts een paar regels code, krijg je een volwaardige mediaspeler. En als uw eisen aan het afspelen van media nog eenvoudiger zijn, neem dan een kijkje MPMoviePlayerViewController (merk op dat View-part).


172
2017-11-22 20:34