19

Tengo un cliente que tiene contenido de video para la web en formato Flash. Mi tarea es ayudarlos a mostrar los videos en una aplicación de iPhone.Ventajas y desventajas de MPMoviePlayerController versus lanzamiento de UIWebView para transmitir películas

Me doy cuenta de que el primer paso es obtener estos videos en el formato Quicktime apropiado para el iPhone.

Luego voy a tener que ayudar al cliente a descubrir cómo o dónde alojar estos archivos. Si eso es complicado, supongo que pueden alojarse en YouTube.

Mi principal preocupación, sin embargo, es qué enfoque tomar para transmitir el video. ¿Cuáles son los pros y contras de MPMoviePlayerController versus el lanzamiento de UIWebView con la URL de la transmisión? Hay alguna diferencia? ¿Es uno de ellos más o menos indulgente? ¿Es uno de ellos una mejor experiencia de usuario? ¿Algún problema que pueda esperar encontrarme?

Supongo que reproducir video es bastante fácil en el iPhone. ¿Es razonable probar ambos y tener uno disponible como alternativa, o sería una pérdida de tiempo? Estoy tratando de programar esto un poco, así que me encantaría escuchar experiencias del mundo real de cualquiera que haya hecho esto.

Respuesta

9

UIWebView no puede reproducir videos. Navegar a una página de Youtube con UIWebview simplemente iniciará la aplicación de Youtube del iPhone. Hacer esto de cierta manera devolverá el control a su aplicación después de que se reproduzca el video. Vea aquí: http://iphoneincubator.com/blog/tag/uiwebview

Recomendaría usar MPMoviePlayer Controller, siempre y cuando solo esté haciendo una transmisión simple. He aquí algunos ejemplos de código para empezar:

NSString *url = @"http://www.example.com/path/to/movie.mp4"; 
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] 
             initWithContentURL:[NSURL URLWithString:url]]; 
[moviePlayer play]; 
+0

OK. Así que mi elección real es entre la aplicación de YouTube y MPMoviePlayerController. Gracias - la última elección parece bastante fácil. Probablemente voy a intentarlo de ambas maneras. – Nosredna

+0

Dan: ¿Puedes editar tu respuesta para que las dos líneas de código estén formateadas como "código"? Al menos para mí en Firefox 3.5 veo la línea NSString como código formateado pero la línea MPMoviePlayerController no lo es. Solo una sugerencia para que se vea mejor para el próximo tipo. –

25

EDIT: Mi ejemplo original en esta respuesta ha inicializado la vista web con un marco de CGRectZero. Esto funcionó hasta iOS 3.2. A partir de iOS 4, la vista web debe tener un marco distinto de cero o el video no se reproducirá. He editado mi ejemplo a continuación para reflejar este cambio.


La respuesta aceptada aquí no es exacta. De hecho, puede usar UIWebView para transmitir videos, y de alguna manera es mejor que MPMoviePlayerController. Si le dices a UIWebView que solicite un archivo de video (por ejemplo, un mp4) mediante loadRequest :, se abrirá una nueva ventana y se transmitirá el video dentro de tu aplicación. A diferencia de MPMoviePlayerController, la ventana de video creada por UIWebView se puede rotar a orientación horizontal o vertical. Cuando termina el video, el usuario puede cerrar esta ventana y regresar a su aplicación.


EDIT 2: Desde ahora se puede implementar un reproductor de vídeo que gira mediante MPMoviePlayerViewController, ya no se puede pensar en una razón para utilizar UIWebView videos utilizando la técnica descrita en esta respuesta.


Consejo: Desde UIWebView crea su propia ventana para reproducir el vídeo, que ni siquiera es necesario añadir el UIWebView a su jerarquía de vistas. Simplemente puede crear el objeto UIWebView y llamar a loadRequest: para reproducir el video sin pasar el objeto para agregar una subvista :.

self.webView = [[[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease]; 
NSURL *url = [NSURL URLWithString:@"http://www.jonathancoulton.com/music/thingaweek/CodeMonkey.mp3"]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
[webView loadRequest:request]; 
+0

Encontré usando UIWebView como el mejor método para mostrar un video en orientación vertical. Sin embargo, tuve que agregar el UIWebView a la jerarquía de la vista al probar en el sim v3.1.3. Tuve problemas para reproducir un archivo .mov pero al abrirlo en el reproductor de Quicktime y hacer un "guardar como" para el iPhone me dio una versión .m4v utilizable. – Jason

+0

También puedo agregar que el reproductor de películas lanzado por UIWebView no puede manejar tantos formatos de video como MPMoviePlayerController. Por ejemplo, las películas con codificación JPEG que graban muchas cámaras digitales se presentan simplemente como un botón de reproducción con una línea cruzada encima (lo que indica una película rota). Por lo tanto, es la orientación de la interfaz o todos los formatos de video. – alleus

+0

@cduhn: ¿Puedes confirmar este código para 4.0? Obtengo "setting movie path: (null)" de esta manera. Aunque todavía funciona en 3.2 - muy confuso – scud

Cuestiones relacionadas