Reproducir vídeo con el MediaPlayer framework del iOS (iPhone/iPad)

Reproducir vídeo con el MediaPlayer framework del iOS (iPhone/iPad)

En este artículo vamos a ver la forma más simple de reproducir vídeo en nuestras aplicaciones desde el código objecitve-c.

Para eso vamos a usar el MediaPlayer framework del iPhone. Al final del artículo podéis encontrar el link de descarga del poryecto de ejemplo.

Antes de empezar con la programación tenemos que añadir el framework MediaPlayer al nuestro proyecto ya que no viene por defecto. Como siempre, hacemos click derecho en el grupo Frameworks del proyecto y elegimos: Add > Exisiting Frameworks…

Esto nos abré la siguiente ventana donde tenemos que elegir el MediaPlayer y hacer click en Add:

Supongamos que tenemos un view controller que contiene un botón normal y queremos reproducir un vídeo al puslar en ese botón. También vamos a suponer que ya ha añadido ese botón en el Interface Bulider y lo ha enlazado con el método -(IBAction)playVideo:(id)sender de su view controller.

Vamos a ver el código a usar para crear el reproductor de vídeo que reproducirá un ficher de video determinado.

Antes que nada vamos a ver cómo sería la declaración de nuestra clase (el .h del view controller). Fíjense que hacemos #import <MediaPlayer/MediaPlayer.h> para poder acceder a las interfaces del MediaPlayer framework y declaramos una variable de tipo MPMoviePlayerController que se encargará de mostrar el vídeo.

#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>

@interface EjemploVideoViewController : UIViewController {
	MPMoviePlayerController *player;
}

-(IBAction)playVideo:(id)sender;

@end

Ahora en el método – (void)viewDidLoad de nuestro view controller (en el .m) ponemos el siguiente código:

NSURL *movieFile = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"video" ofType:@"mp4"]];
player = [[MPMoviePlayerController alloc] initWithContentURL:movieFile];

En la primera línea obtenemos el path de nuestro fichero de vídeo (en este caso tenemos el vídeo entre nuestros ficheros de recursos como video.mp4) y con ese path creamos el reproductor del vídeo.

Finalmente al pulsar el botón que habíamos creado en el Interface Builder ejecutaremos el siguiente código:

[player play]

Y ya está, con esto conseguiremos reproducir un vídeo en nuestro programa.

Se puede usar el MPMoviePlayerController también para reproducir videos en streaming.
Los vídeos suelen ser ficheros grandes cuya carga puede llevar un tiempo determinado. Para el constructor de MPMoviePlayerController carga el vídeo en un thread diferente para no bloquear la ejecución del programa.
Si queremos saber cuando ha terminado la carga del vídeo podemos suscribirnos a la notificación llamada MPMoviePlayerContentPreloadDidFinishNotification de la siguiente manera:

[[NSNotificationCenter defaultCenter]
     addObserver:self
            selector:@selector(miMetodo:)
                name:MPMoviePlayerContentPreloadDidFinishNotification
               object:nil];

Descargar proyecto de ejemplo.