Diferencias entre AVPlayer y MPMoviePlayerController [cerrado]

87

Estoy desarrollando una aplicación para iPhone que necesita reproducir videos. Hasta ahora, aprendí que hay al menos dos API para lograr esto; AVPlayery MPMoviePlayerController.

¿Cuáles son las principales diferencias?

suse
fuente
4
Intenté reformular esta pregunta para asegurarme de que no genera respuestas basadas en opiniones.
Hasta el

Respuestas:

173

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

AVPlayerle 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 AVPlayerover MPMoviePlayerControllersería, por ejemplo, su versión extendida, AVQueuePlayerya que es capaz de reproducir sin interrupciones múltiples fuentes de películas. Sin duda, otra ventaja es el AVFoundationmarco 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 AVPlayeres 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

MPMoviePlayerControlleres 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, MPMoviePlayerControllerutiliza algunos que NSNotificationscubren todo lo que necesita la aplicación normal.

Debajo del capó, se MPMoviePlayerControllerconstruye sobre AVPlayer, pero eso en realidad es completamente transparente para el usuario, no tiene acceso a esa capa mientras lo usa MPMoviePlayerController.

MPMoviePlayerControllerutiliza el subyacente AVPlayercomo una instancia única, por lo que no es posible usar varias instancias de MPMoviePlayerControllerpara reproducir videos al mismo tiempo.

Por otro lado, tan pronto como intente extender la funcionalidad de MPMoviePlayerControllercon 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 MPMoviePlayerControllerover AVPlayerya 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).

Hasta
fuente
2
AVPlayer también te permite usar animaciones de capas automáticamente. Si desea ejecutar Core Animation en segundo plano, no use un MPMoviePlayerController, aunque podría tener una configuración para habilitarlos, solo tenga en cuenta eso si está usando CALayer cosas
Stephen J
3
No. La respuesta es correcta. La interfaz de usuario de MPMoviePlayerController se puede deshabilitar o reemplazar por una personalizada.
Dave Batton
1
@Besi no, totalmente correcto como está escrito: definitivamente se puede deshabilitar (usando MPMovieControlStyleNone) y, por lo tanto, reemplazarlo, ya que no hay nada que le impida agregar su propia vista como hermana de la vista de MPMoviePlayerController o directamente en su backgroundView.
Hasta el
8
A partir de iOS 9, MPMoviePlayerController está obsoleto y, por lo tanto, debe usar AVPlayer para proyectos futuros
lewis
1
Esa es información súper valiosa @ lewis42; la agregaré a mi publicación antigua :)
Hasta el