2013-09-01 30 views
5

ビデオストリームを表示するためにVideoViewを使用しています。 MediaControllerをビュー自体にアタッチする必要があるため、ビデオビューによる黒い画面のちらつきを防ぐ必要があるためです。私はNexus 7で下のコードをテストしましたが、魅力的でした。しかし、今では私のSGS2でそれをテストし、何らかの理由でOnVideoSizeChangedが呼び出されることはありません。OnVideoSizeChangedが呼び出されません

@Override 
public void onPrepared(MediaPlayer mp) { 
    // TODO Auto-generated method stub 
    Log.i("ONPREP", "called"); 
    mp.setOnVideoSizeChangedListener(new OnVideoSizeChangedListener() { 
     @Override 
     public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { 

      videoview.setMediaController(mc); 
      mc.setAnchorView(videoview); 
      videoview.setBackgroundColor(Color.TRANSPARENT); 

      Log.i("ONSIZECHANGE", "called"); 
     } 
    }); 
} 

それが必要のような動画が再生されて、私はOnVideoSizeChangedListenerを削除し、ちょうどonPrepared方法でコードを置くことによってこれをテストしたが、これは画面のちらつきの問題を戻すとのMediaController付着していないを残しています。この動作は、LogCat、ONPREPタグのログ情報でも表示されますが、ONSIZERANGEは表示されません。私のN7の両方で、明白に背景色が変更される原因になります。

これは設定して、ビデオを開始したコードは次のとおりです。

videoview.setOnPreparedListener(MainActivity.this); 
      mc = new MediaController(MainActivity.this); 
      mc.setMediaPlayer(videoview); 
      videoview.setVideoURI(videourI); 
      videoview.start(); 

だから、1つのデバイス上ではなく、別の上と呼ばれる理由?

編集: SGS2と同じ問題をノート2でテストしました。

答えて

1

onVideoSizeChangedは、低レベルプレーヤ実装のイベントによってトリガされます。これは、プラットフォームによって異なる場合があります。プレーヤーがonVideoSizeChangedonPreparedの前に電話するのは完全に合法です。

実際、VideoViewはサーフェスサイズを管理するために独自のOnVideoSizeChangedListenerコールバックを設定しているので、まったく使用しないでください。あなたの例から、私がなぜそれを使用しているのかは分かりません。setMediaControllerはで呼び出され、onVideoSizeChangedではなく、複数回呼び出すことができます。

+0

OnPreparedListenerを使用するだけでは動作しないのは、setAnchorViewメソッドです。これはビデオビジュアルには関連付けられていません。 OnVideoSizeChangedが呼び出されると、それをアタッチできます。 –

1

これはsamsungデバイスのバグだと思われます。 私のアプリケーションでは、videoviewのサイズが0x0(おそらく表示/非表示の場合もある)である場合、onVideoSizeChangeは呼び出されないことに気付きました。 videoviewのサイズを0x0以外の値に設定すると、onVideoSizeChangeが正しく呼び出されます。

関連する問題