2010-11-29 9 views
11

cada uno. Estoy tratando de descubrir cómo reproducir en vivo usando MPMoviePlayerController. Para probar, estoy usando la muestra de prueba de Apples http://devimages.apple.com/iphone/samples/bipbopall.html. Funciona perfectamente en UIWebView, pero no puedo hacer que funcione con MPMoviePlayerController. No es mi trozo de código:MPMoviePlayerController y HTTP Live Streaming

NSURL *mediaURL = [NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbopall.html"]; 
MPMoviePlayerController *mp = [[MPMoviePlayerController alloc] initWithContentURL:mediaURL]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(moviePlayBackDidFinish:) 
              name:MPMoviePlayerPlaybackDidFinishNotification 
              object:nil]; 

[mp setControlStyle:MPMovieControlStyleFullscreen]; 
[mp setMovieSourceType:MPMovieSourceTypeStreaming]; 
[mp setFullscreen:YES]; 

[self.view addSubview:[mp view]]; 

[mp prepareToPlay]; 
[mp play]; 

En realidad, el controlador recieves MPMoviePlayerPlaybackDidFinishNotification sin jugar nada. ¿Dónde está el problema?

+0

"*** Terminación de aplicación debido a excepción no detectada 'NSInvalidArgumentException', razón: 'Un AVPlayerItem no puede estar asociado con más de una instancia de AVPlayer '' – openfrog

Respuesta

17

Su problema es probablemente con la URL. MPMoviePlayerController quiere la URL directamente al archivo que desea reproducir. Está proporcionando la URL para una página HTML que el reproductor de películas no comprende. Es por eso que funciona en UIWebView ya que un navegador web comprende HTML. Si desea más información acerca de lo que está mal se puede comprobar el error de seguir adelante, citado de la documentación de Apple:

para comprobar si hay errores en la carga de URL, registro de los MPMoviePlayerContentPreloadDidFinishNotification o MPMoviePlayerPlaybackDidFinishNotification notificaciones. En caso de error, estas notificaciones contienen un objeto NSError disponible con la clave @ "error" en el diccionario userInfo de la notificación.

Se vería algo como:

- (void) moviePlayBackDidFinish:(NSNotification*)notification { 
    NSError *error = [[notification userInfo] objectForKey:@"error"]; 
    if (error) { 
     NSLog(@"Did finish with error: %@", error); 
    } 
} 

Si desea tratar de reproducir la muestra se puede tratar de acceder a la dirección URL de la corriente directa, que serían: http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8

+0

Muchas gracias, la url era el problema real. Una pregunta más: MPMoviePlayerController: ¿es esta la opción correcta para reproducir transmisiones de audio en vivo (como la radio por Internet)? Busqué las formas de implementar HTTP Live Streaming y llegué a la conclusión de que MoviePlayer era lo que necesitaba. – Andrew

+0

De nada. No he hecho ninguna transmisión yo misma, así que no puedo comentar cuál enfoque es el mejor. –

0

Trate object:mp en lugar de object:nil en su NSNotification

5

Debe usar el enlace directo para reproducir el archivo de lista: http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8

NSURL *mediaURL = [NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"]; 
MPMoviePlayerController *mediaPlayer = [[MPMoviePlayerController alloc] initWithContentURL:mediaURL]; 
Cuestiones relacionadas