2012-03-20 22 views
8

Estoy tratando de configurar un reproductor de video muy simple. (IOS 5.1, Xcode 4.3.1)MPMoviePlayerController se detiene después de cuatro segundos

-(void)playMedia { 
NSString *movieFile = [[NSBundle mainBundle] pathForResource:@"Movie" ofType:@"m4v"]; 
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:movieFile]]; 

[moviePlayer prepareToPlay]; 
moviePlayer.view.frame = self.view.bounds; 
moviePlayer.scalingMode = MPMovieScalingModeAspectFit; 
moviePlayer.movieSourceType = MPMovieSourceTypeFile; 
moviePlayer.fullscreen = YES; 
moviePlayer.controlStyle = MPMovieControlStyleFullscreen; 
[self.view addSubview: moviePlayer.view]; 

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(playMediaFinished:) 
              name:MPMoviePlayerPlaybackDidFinishNotification 
              object:moviePlayer]; 
[moviePlayer play]; 
} 

Funciona bien cuando se le llama, pero sólo juega durante cuatro segundos, a continuación, aparece una pantalla en negro. Si toco la pantalla durante la reproducción, reproducirá toda la secuencia. Si dejo de tocar la pantalla durante cuatro segundos, aparece la pantalla negra.

¿Qué me falta?

Kurt


Versión editada juega bien.

En el archivo de interfaz:

@property (nonatomic,strong) MPMoviePlayerController *myMovieController; 

En el archivo .m:

-(void)playMedia { 
NSString *movieFile = [[NSBundle mainBundle] pathForResource:@"Movie" ofType:@"m4v"]; 
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:movieFile]]; 

[moviePlayer prepareToPlay]; 
moviePlayer.view.frame = self.view.bounds; 
moviePlayer.scalingMode = MPMovieScalingModeAspectFit; 
moviePlayer.movieSourceType = MPMovieSourceTypeFile; 
moviePlayer.fullscreen = YES; 
moviePlayer.controlStyle = MPMovieControlStyleFullscreen; 

self.myMovieController = moviePlayer; 
[self.view addSubview: self.myMovieController.view]; 

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(playMediaFinished:) 
              name:MPMoviePlayerPlaybackDidFinishNotification 
              object:moviePlayer]; 
[self.myMovieController play]; 
} 

Respuesta

19

Si está utilizando ARC Creo que necesita para retener el MoviePlayer exterior. Simplemente lo asigné a una nueva propiedad yo mismo. HTH

+0

Estoy usando ARC, pero disculpe mi ignorancia. Si llamo a [moviePlayer retener], aparece un mensaje de error "ARC prohíbe el envío explícito de mensajes de 'retener'". Gracias por la rápida respuesta. – Kurt

+0

Lo tengo. Como dijiste, asignaste una propiedad. Editaré la publicación. – Kurt

+0

Buenas cosas, me alegro de que funcionó. No sé si hay otra manera más inteligente de retener en ARC, como dices que no puedes llamar retener explícitamente, pero la propiedad hace el trabajo. – davidfrancis

4

La solución es que el jugador debería ser una variable de instancia o propiedad del controlador de vista. es decir Debemos utilizar la instancia de MPMoviePlayerController

@property (no atómica, fuerte) MPMoviePlayerController * myMovieController;

+0

¡Trabajó para mí! Gracias. Al pensar hacia atrás, adivina que hace sens. De cualquier forma, gracias – YuviGr

+0

Gracias @YuviGr – Vicky

Cuestiones relacionadas