2011-08-10 12 views
5

私は、ユーザーがデバイス(タッチスクリーンなど)に何かをするまで、同じビデオを何度もループさせ続けるVideoViewを持つアプリケーションを持っています。現在、OnCompletionListener()を使用してビデオを再開していますそれが終わると。これは、Samsung Replenishを除いて、テストしたすべてのデバイスで正常に動作します。補充する上で何が起こるVideoViewルーピングビデオ

mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
     public void onCompletion(MediaPlayer mp) { 
      mVideoView.setVideoPath(file.getAbsolutePath()); 
      mVideoView.start(); 
     } 
    }); 

は、ビデオは一度介してすべての道を果たしているが、その後再び開始されることはありませんし、画面は(まだオンしかし、バックライト)すべての黒を行くです:

は、ここに私のコードです。私がこの全く同じコードでテストした他のすべてのデバイスでは、ビデオを繰り返していました。このエラーを引き起こす可能性のある補充について具体的なことを知っている人はいますか?私はおそらくsetVideoPath()の呼び出しを遅らせ、200-300msでstart()を呼び出すと助けになるかもしれないと思ったが、それは何の影響もなかった。私は本当にここに迷っています。私は私のログでこれらのメッセージを見てい

ERROR/QCvdec(87):VDECがまだ初期化されていない場合に発行されるフラッシュOMX。

ERROR/QCvdec(87):OMXCORE-SM:受け取ったコマンドDISABLE(2)

ERROR/QCvdec(87):VDECがまだ初期化されていない場合に発行されるフラッシュOMX。

ERROR/QCvdec(87):OMXCORE-SM:受け取ったコマンドENABLE(3)

しかし、これらのログが起こっている両方のビデオが開始される(それが果たしている1回目)と、それが失敗した開始するタイミング再び。私は、彼らが私の問題に関連しているかどうかわからないのです

編集:

私はnullにmVideoViewを設定し、右setVideoPath前に()findViewByIdとそれへの新しい参照を取得しようとしました()。これは、OnCompletionListenerの設定方法が複雑になることを知っています。しかしそれにかかわらず、それはとにかく、同じ暗い画面がまだ動作しませんでした。

編集2:

私は時々映像も初めて開始されないことに注意することが開始しました。

 mVideoView.setVideoPath(file.getAbsolutePath()); 
     mVideoView.start(); 

よりconsistantly開始するようだが、その最初の時間はそれがなく、かなり100%に再生されているとき:私が初めてそれを起動するには、これらの同じ2本のラインを使用しています。

編集3:これは今私が設定した方法です。私は手動でOnPreparedListenerを設定して、私のためにビデオを開始します。

mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
    public void onCompletion(MediaPlayer mp) { 
     mVideoView.setVideoPath(file.getAbsolutePath()); 

    } 
}); 

これはそうやっている:だから私は

 mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 

      @Override 
      public void onPrepared(MediaPlayer arg0) { 
       mVideoView.start(); 
      } 
     }); 

私はこのように私はちょうどのみsetVideoPath()メソッドを呼び出して、ビデオを再起動する準備ができていたときにその後、私のonCreate()にこれを追加しましたトリック。私はそれがしばらく動かさせて、確かに見つけ出す。

編集4:VideoView setVideoPathのコードで

@MByDは())(setVideoUriのラッパーです。 setVideoURI()is setting mStartWhenPrepared = false;デフォルトのOnPreparedListenerは、再生を開始するかどうかを決定するためにこのスイッチをチェックします。そのため、デフォルトのリスナーでは開始しません。私はそれ以上のことは検討していませんが、mStartWhenPrepared値をtrueに変更できるセッターメソッドがあると、ビデオがデフォルトのリスナーから開始されます。

+0

興味深い質問です。 – PedroAGSantos

答えて

3

.start()を呼び出す前にビデオの準備をしましたか?ドキュメントから

:その準備ができてOnPreparedListenerhttp://developer.android.com/reference/android/media/MediaPlayer.html#prepare%28%29

あなたがビデオを開始することができます。

+0

VideoViewを使用しているときに準備を呼び出す必要はありません。 – MByD

+0

prepareはVideoViewではなくMediaPlayerのためのメソッドです。私は、VideoViewがsetVideoPath()メソッドの一部として基になるMediaPlayerでprepareを呼び出すと仮定します。準備されたリスナーは、私が必要としているものかもしれません。私は今それをテストしており、それはより良くなっているようです。すべてがうまくいけば正解を得るでしょう。ありがとう – FoamyGuy