Estoy desarrollando una aplicación para iPhone que necesita reproducir videos. Hasta ahora, aprendí que hay al menos dos API para lograr esto; AVPlayer
y MPMoviePlayerController
.
¿Cuáles son las principales diferencias?
Estoy desarrollando una aplicación para iPhone que necesita reproducir videos. Hasta ahora, aprendí que hay al menos dos API para lograr esto; AVPlayer
y MPMoviePlayerController
.
¿Cuáles son las principales diferencias?
Respuestas:
NOTA a partir de iOS9, Apple ha desaprobado el MPMoviePlayerController:
La clase MPMoviePlayerController está formalmente en desuso en iOS 9. (La clase MPMoviePlayerViewController también está formalmente en desuso). Para reproducir contenido de video en iOS 9 y posterior, en su lugar, use la clase AVPictureInPictureController o AVPlayerViewController del marco AVKit, o la clase WKWebView de WebKit.
Copiado de la referencia de MPMoviePlayerController .
AVPlayer
le brinda mucha más flexibilidad pero está bastante mal documentado. El uso de esta API lo obligará a crear su propia interfaz de usuario. AVFoundation
(el marco que le brinda AVPlayer
) generalmente es un poco difícil para el usuario (codificador), ya que lo obliga a usar mucho la observación de valores clave para verificar estados. El concepto de KVO es genial, no me malinterpretes; aún así, para los desarrolladores sin experiencia puede ser doloroso aprenderlo. Apple a veces omite la información sobre qué propiedades son realmente compatibles con KVO y eso te obligará a experimentar un poco.
Una gran ventaja de AVPlayer
over MPMoviePlayerController
sería, por ejemplo, su versión extendida, AVQueuePlayer
ya que es capaz de reproducir sin interrupciones múltiples fuentes de películas. Sin duda, otra ventaja es el AVFoundation
marco rico en funciones que le permite hacer cosas como la composición / codificación / conversión de películas sobre la marcha.
Otra gran ventaja de AVPlayer
es el hecho de que puede reproducir múltiples fuentes de video simultáneamente (por ejemplo, una al lado de la otra) sin ningún problema.
MPMoviePlayerController
es fácil de usar y cubre la mayoría de las necesidades de inmediato. El uso de esta API le brindará una interfaz de usuario atractiva y de fácil comprensión. Sin embargo, la interfaz de usuario se puede desactivar o reemplazar por una personalizada.
Para cambios de estado, MPMoviePlayerController
utiliza algunos que NSNotifications
cubren todo lo que necesita la aplicación normal.
Debajo del capó, se MPMoviePlayerController
construye sobre AVPlayer
, pero eso en realidad es completamente transparente para el usuario, no tiene acceso a esa capa mientras lo usa MPMoviePlayerController
.
MPMoviePlayerController
utiliza el subyacente AVPlayer
como una instancia única, por lo que no es posible usar varias instancias de MPMoviePlayerController
para reproducir videos al mismo tiempo.
Por otro lado, tan pronto como intente extender la funcionalidad de MPMoviePlayerController
con sus propias características, el código se vuelve desagradable rápidamente; por ejemplo, posiblemente comenzará a usar múltiples temporizadores para cubrir cosas como una detección adecuada de hambre (en realidad, esa característica se incluyó en la versión de iOS5 de esta clase), actualizaciones personalizadas de la interfaz de usuario, ... O puede terminar teniendo más de un puñado de propiedades estatales que intentan cubrir cosas como abortar elegantemente la reproducción mientras el reproductor aún está almacenando en búfer.
Recomendación personal
He usado ambos y seguiré usando ambos, dependiendo de las necesidades de la aplicación que tengo el placer de construir. Para la mayoría de los proyectos (simples), recomendaría usar MPMoviePlayerController
over AVPlayer
ya que es muy simple de usar y con solo unas pocas líneas de código, obtienes un reproductor multimedia completo. Y si sus demandas sobre la reproducción de medios son aún más simples, eche un vistazo a MPMoviePlayerViewController
(tenga en cuenta que View-part).
backgroundView
.