2010-10-29 7 views
1

Je développe une application iPad où je joue les vidéos stockées dans l'application elle-même. Je représente la liste des vidéos dans une vue de table. Lorsque je sélectionne une ligne, la vidéo correspondant à cette ligne est lue. Mais en effectuant ceci, parfois l'écran devient noir, aucune vidéo n'est visible mais seulement l'audio joue.Mpmovieplayercontroller dans iPad - Pas de vidéo seulement audio

Je suis conscient que la lecture de la vidéo en mode plein écran ou l'utilisation de MPMoviePlayerViewController élimine ce problème. Mais mon exigence est que je ne veux pas jouer le film en plein écran au départ. Veuillez me guider sur la façon dont cela peut être réalisé.

-(void)playMovie { 
    MPMoviePlayerController *movieController = [[MPMoviePlayerController alloc]  initWithContentURL:movieUrl]; 
    self.moviePalyer = movieController; 
    [movieController release]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePalyerDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object: self.moviePalyer]; 

self.moviePalyer.view.frame = CGRectMake(240, 0, 561, 313); 
self.moviePalyer.view.backgroundColor = [UIColor clearColor]; 
[self.moviePalyer prepareToPlay]; 
[self.view addSubview: self.moviePalyer.view]; 
[self.moviePalyer play]; 

} 
-(void)moviePalyerDidFinish:(NSNotification*)notification 
{ 
[moviePalyer.view removeFromSuperview]; 
[moviePalyer stop]; 
moviePalyer.initialPlaybackTime = -1.0; 

[[NSNotificationCenter defaultCenter] removeObserver:self 
      name:MPMoviePlayerPlaybackDidFinishNotification 
       object:moviePalyer]; 
[moviePalyer release]; 
moviePalyer = nil; 
} 

NOTE: C'est sur simulateur ipad

+0

Comment déclarez-vous la propriété moviePlayer dans votre en-tête? – executor21

+0

MPMoviePlayerController * moviePlayer; @property (nonatomic, retain) MPMoviePlayerController * moviePlayer; – samben

Répondre

1

J'ai résolu le problème. Auparavant, je créais MPMoviePlayerController pour chaque sélection de ligne et le libérais dans la méthode de notification moviedidfinish. Mais maintenant, au lieu de créer movieplayercontroller pour chaque sélection de ligne, je réutilise l'objet MPMoviePlayerControler qui a déjà été créé.

Ce qui suit est l'extrait de code:

-(void)playMovie 
{ 
    if(self.moviePalyer == nil) 
    { 

    MPMoviePlayerController *movieController = [[MPMoviePlayerController alloc] initWithContentURL:url]; 
    self.moviePalyer = movieController; 
    [movieController release]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePalyerDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:self.moviePalyer]; 

    self.moviePalyer.repeatMode = MPMovieRepeatModeOne; 
    self.moviePalyer.view.frame = CGRectMake(240, 0, 561, 313); 
    self.moviePalyer.view.backgroundColor = [UIColor clearColor]; 
} 
else 
{ 
    [self.moviePalyer setContentURL:url]; 
    [self stopMovie]; 
} 
[self.view addSubview: self.moviePalyer.view]; 
[self.moviePalyer play]; 
    } 
    -(void)stopMovie 
    { 
    [self.moviePalyer.view removeFromSuperview]; 
[self.moviePalyer stop]; 
self.moviePalyer.initialPlaybackTime = -1.0; 
    } 

Je publierai l'objet movieplayer dans la méthode dealloc.

Espérons que cela aide qui a le même problème.

+0

bien fait. Résout le problème sans vidéo. – Sid

Questions connexes