2012-03-20 12 views
8

Sto provando a configurare un video player molto semplice. (IOS 5.1, Xcode 4.3.1)MPMoviePlayerController si arresta dopo quattro secondi

-(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]; 
} 

Funziona bene quando viene chiamato, ma gioca solo per quattro secondi, quindi viene visualizzata una schermata nera. Se tocco lo schermo durante la riproduzione, riprodurrà l'intera sequenza. Se smetto di toccare lo schermo per quattro secondi, appare la schermata nera.

Cosa mi manca?

Kurt


versione modificata gioca bene.

Nel file di interfaccia:

@property (nonatomic,strong) MPMoviePlayerController *myMovieController; 

Nel file .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]; 
} 

risposta

19

Se stai usando ARC Credo che hai bisogno di mantenere il MoviePlayer esterno. L'ho appena assegnato a una nuova proprietà da solo. HTH

+0

Sto usando ARC, ma perdona la mia ignoranza. Se chiamo [moviePlayer retain], viene visualizzato un messaggio di errore "ARC proibisce l'invio esplicito di" retain "dei messaggi. Grazie per la risposta rapida. – Kurt

+0

Capito. Come hai detto, hai assegnato una proprietà. Modifico il post – Kurt

+0

Roba buona, felice che funzionasse. Non so se c'è un altro modo più intelligente per fare il mantenimento in ARC, come dici tu non puoi chiamare keep in modo esplicito, ma la proprietà fa il lavoro. – davidfrancis

4

La soluzione è che il lettore deve essere una variabile di istanza o una proprietà del controller di visualizzazione. cioè Dobbiamo usare l'istanza di MPMoviePlayerController

@property (nonatomic, forte) MPMoviePlayerController * myMovieController;

+0

ha funzionato per me! Grazie. Nel pensare all'indietro, indovina il senso. In ogni modo grazie – YuviGr

+0

Grazie @YuviGr – Vicky

Problemi correlati