2009-06-26 378 views
0

我正在使用MediaPlayer播放幾個不同視頻的iPhone應用程序。它對第一個視頻非常有用,但是當我嘗試播放另一個視頻時,屏幕保持黑屏,只有音頻播放。有誰知道爲什麼會發生這種情況?iPhone Dev:MediaPlayer在後續播放中不播放視頻(僅音頻)

這裏是我的代碼:

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

回答

1

我想通了。在調用第二個視頻之前,我需要釋放MediaPlayer。

代碼示例:

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

你真的要去其他視頻?

我注意到3.0中的一個錯誤,如果你試圖從同一個文件播放兩次視頻,你會得到一些奇怪的播放工件。上面的代碼看起來像只有一個指向單個文件的URL。

我的解決方法是重命名我的文件,但這意味着您必須將其複製到文檔目錄以更改名稱......也許您可以看到iPhone文件系統是否支持符號或硬鏈接回資源目錄中的原始文件,以便爲電影播放器​​提供不同的名稱。

我在這個問題上提交了RADAR,你也應該。把一個超級簡單的例子放在一起,顯示什麼是不工作。

+0

我正在更改movieURL中的URL。我將它改爲Vid01,Vid02,Vid03等。對於不同的視頻,聲音是正確的,只是屏幕在播放時是黑色的。 – Matt 2009-06-26 20:12:37

1

你還應該注意的是,播放問題可能只發生在模擬器,而不是在手機上(如隨後回放「閃蒸」或不顯示圖像)。

+0

我也注意到了。謝謝! – Matt 2009-07-01 00:54:30

0

不應該在資源路徑之前更改vidname而不是之後?

無論採用哪種方式,最好將其編寫爲接受可傳遞文件名的NSString。你知道像

-(NSURL *)movieURLForVideo: (NSString) videoFileName 

? 另外我不喜歡你缺乏{}的。這使我更容易閱讀/調試。一般來說,這是一個好習慣。花些額外的時間將事情寫得儘可能清晰,以後可以節省您的麻煩。

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

是否將vidName設置爲某處的Vid01?我沒有看到它,所以我不得不問。這一般只是令人困惑。我已經寫了OS X,所以我不知道是否有任何差異,但我用這個當我加載在我當前的項目地圖:

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

就好像你正在寫比你需要的更多。