2009-06-26 17 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

私はそれを理解しました。 2番目のビデオを呼び出す前に、MediaPlayerをリリースする必要がありました。

コード例:

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

あなたは本当に、他の動画をするつもりですか?

私は同じファイルから2回ビデオを再生しようとすると、奇妙な再生アーチファクトが発生するというバグに気づきました。上記のコードは、1つのファイルを指すURLしか持たないようです。

私の回避策はファイルの名前を変更することでしたが、名前を変更するにはドキュメントディレクトリにコピーする必要がありました。おそらく、iPhoneファイルシステムがシンボリックまたはハードリソースディレクトリの元のファイルにリンクして、ムービープレーヤに異なる名前を与えることができます。

私はこの問題にRADARを提出しました。何が動作していないかを示す単純な単純な例をまとめてください。

+0

movieURL内のURLを変更しています。私はそれをVid01、Vid02、Vid03などに変更します。サウンドはさまざまなビデオに適しています。再生すると画面が黒くなるだけです。 – Matt

1

また(「点滅」や画像を表示しないように、後続の再生など)再生の問題のみシミュレータではなく、携帯電話上で発生する可能性があることに留意すべきです。

+0

私もそれに気づいた。ありがとう! – Matt

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

ちょうどそうですあなたがする必要がある以上の方法。

関連する問題