2009-06-26 6 views
0

Ich arbeite an einer iPhone-Anwendung, die einen MediaPlayer verwendet, um ein paar verschiedene Videos abzuspielen. Es funktioniert gut für das erste Video, aber wenn ich versuche, ein anderes Video zu spielen, bleibt der Bildschirm schwarz und nur das Audio wird abgespielt. Hat jemand eine Idee, warum dies passieren könnte?iPhone Dev: MediaPlayer spielt kein Video (nur Audio) bei nachfolgenden Spielen ab

Hier ist mein 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]; 
    } 

Antwort

1

Ich habe es herausgefunden. Ich musste den MediaPlayer freigeben, bevor ich das zweite Video anrief.

Code-Beispiel:

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

Sind Sie wirklich zu anderen Videos gehen?

Ich habe einen Fehler in 3.0 bemerkt, dass, wenn Sie versuchen, ein Video zweimal aus der gleichen Datei zu spielen, Sie einige seltsame Wiedergabe Artefakte bekommen. Der obige Code sieht so aus, als hätte er immer nur eine URL, die auf eine einzelne Datei verweist.

Der Workaround, den ich hatte, war, meine Datei umzubenennen, aber das heißt, Sie müssen es in das Dokumentenverzeichnis kopieren, um den Namen zu ändern ... vielleicht könnten Sie sehen, ob das iPhone-Dateisystem eine symbolische oder harte unterstützen würde Verknüpfen Sie mit der ursprünglichen Datei im Ressourcenverzeichnis, damit Sie dem Movie-Player verschiedene Namen geben können.

Ich habe ein RADAR zu diesem Thema eingereicht, sollten Sie auch. Stellen Sie einfach ein super einfaches Beispiel zusammen, das zeigt, was nicht funktioniert.

+0

Ich ändere die URL in MovieURL. Ich ändere es in Vid01, Vid02, Vid03, etc. Der Sound ist korrekt für die verschiedenen Videos, nur dass der Bildschirm schwarz ist, wenn er abgespielt wird. – Matt

1

Sie sollen auch beachten, dass die Probleme bei der Wiedergabe nur im Simulator auftreten können, nicht am Telefon (wie spätere Wiedergabe ‚blinken‘ oder kein Bild angezeigt wird).

+0

Das ist mir auch aufgefallen. Vielen Dank! – Matt

0

Sollte sich nicht der vidname vor dem Ressourcenpfad ändern statt nach?

In jedem Fall wäre es besser, es zu schreiben, um einen NSString zu akzeptieren, an den Sie den Dateinamen übergeben können. Sie wissen wie

-(NSURL *)movieURLForVideo: (NSString) videoFileName 

? Auch ich mochte deinen Mangel an {} nicht. Dies macht es viel einfacher zu lesen/debuggen für mich. Es ist eine gute Gewohnheit, im Allgemeinen zu haben. Die zusätzliche Zeit zu nehmen, Dinge so ordentlich zu schreiben, wie Sie können, wird Ihnen später Kopfschmerzen ersparen.

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

Wird vidName irgendwo auf Vid01 gesetzt? Ich habe es nicht gesehen, also muss ich fragen. Dies ist im Allgemeinen nur verwirrend. Ich habe für OS X geschrieben, so dass ich bin mir nicht sicher, ob es irgendwelche Unterschiede sind, aber ich benutze diese, wenn ich Karten in meinem aktuellen Projekt laden:

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

scheint Genau wie Sie schreiben viel mehr als du sein musst.

Verwandte Themen