2009-06-26 12 views
0

Je travaille sur une application iPhone qui utilise un MediaPlayer pour lire quelques vidéos différentes. Cela fonctionne très bien pour la première vidéo mais quand j'essaie d'en jouer une autre, l'écran reste noir et seul le son est lu. Est-ce que quelqu'un a une idée de pourquoi cela pourrait se produire?iPhone Dev: MediaPlayer ne lit pas la vidéo (uniquement audio) sur les lectures suivantes

Voici mon code:

-(NSURL *)movieURL 
{ 
    NSBundle *bundle = [NSBundle mainBundle]; 
    if (bundle) 
    {  
     NSString *moviePath = [bundle pathForResource:vidName ofType:@"mov"]; 
     if (moviePath) 
      mMovieURL = [NSURL fileURLWithPath:moviePath]; 

     if (vidName == @"Vid01") 
      vidName = @"Vid02"; 
     else if (vidName == @"Vid02") 
      vidName = @"Vid03"; 
    } 

    return mMovieURL; 
}  

- (void)onHitButton1 { 
     mMoviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[self movieURL]]; 
     mMoviePlayer.movieControlMode = MPMovieControlModeHidden; 
     [mMoviePlayer play]; 
    } 

Répondre

1

Je l'ai compris. J'avais besoin de libérer le MediaPlayer avant d'appeler la deuxième vidéo.

Exemple de code:

- (void)onHitButton1 { 
    [mMoviePlayer release]; 
    mMoviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[self movieURL]]; 
    mMoviePlayer.movieControlMode = MPMovieControlModeHidden; 
    [mMoviePlayer play]; 
} 
0

Tu vas vraiment à d'autres vidéos?

J'ai remarqué un bug dans 3.0 que si vous essayez de lire une vidéo deux fois à partir du même fichier, vous obtenez quelques artefacts de lecture étranges. Le code que vous avez ci-dessus semble n'avoir qu'une URL pointant vers un seul fichier. La solution de contournement que j'avais était de renommer mon fichier, mais cela signifie que vous devez le copier dans le répertoire de documents afin de changer le nom ... peut-être pourriez-vous voir si le système de fichiers de l'iPhone prendrait en charge un reliez le fichier d'origine au répertoire de ressources afin de pouvoir alimenter le lecteur de noms différents.

J'ai déposé un RADAR sur ce problème, vous devriez aussi. Juste mis en place un exemple super simple montrant ce qui ne fonctionne pas.

+0

Je modifie l'URL dans movieURL. Je le change en Vid01, Vid02, Vid03, etc. Le son est correct pour les différentes vidéos, c'est juste que l'écran est noir quand il joue. – Matt

1

Vous devriez également noter que les problèmes de lecture ne peuvent se produire dans le simulateur, et non sur le téléphone (comme la lecture ultérieure « clignotant » ou non afficher une image).

+0

J'ai remarqué cela aussi. Merci! – Matt

0

Est-ce que vidname ne devrait pas changer avant le chemin de la ressource au lieu de après? Dans tous les cas, il serait préférable de l'écrire pour accepter un NSString auquel vous pouvez passer le nom de fichier. Vous savez comme

-(NSURL *)movieURLForVideo: (NSString) videoFileName 

? Aussi, je n'ai pas aimé votre manque de {}. Cela rend beaucoup plus facile à lire/déboguer pour moi. C'est une bonne habitude à avoir en général. Prendre le temps supplémentaire d'écrire des choses aussi soignées que possible vous permettra de sauver des maux de tête plus tard.

-(NSURL *)movieURL 
{ 
    NSBundle *bundle = [NSBundle mainBundle]; 
    if (bundle) 
    {  
     if (vidName == @"Vid01") 
     { 
      vidName = @"Vid02"; 
     } 
     else if (vidName == @"Vid02") 
     { 
      vidName = @"Vid03"; 
     } 
     else if (vidName == @"Vid03") 
     { 
      vidName = @"Vid01"; 
     } 
    NSString *moviePath = [bundle pathForResource:vidName ofType:@"mov"]; 
     if (moviePath) 
     { 
      mMovieURL = [NSURL fileURLWithPath:moviePath]; 
     } 
    } 
    return mMovieURL; 
}  

Est-ce que vidName est défini sur Vid01 quelque part? Je ne l'ai pas vu alors je dois demander. C'est juste déroutant en général. J'ai écrit pour OS X, donc je ne sais pas s'il y a des différences, mais je l'utilise quand je suis dans mon chargement des cartes projet en cours:

NSString* mapPath = [[NSBundle mainBundle] pathForResource:mapFileName ofType:mapFileType]; 
    NSURL* mapURL = [NSURL fileURLWithPath: mapPath]; 
    currentMap_ = [[Map alloc] initWithContentsOfURL: mapURL]; 

semble Tout comme vous écrivez beaucoup plus que ce dont vous avez besoin.

Questions connexes