1

以下のコードは、私のリモートビデオを再生するためのものです。

Uri uri = Uri.parse(URLPath);

vv.setVideoURI(uri);
vv.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
//play next one
}
});

vv.setOnErrorListener(new OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
return false;
}
});

私のデバイスのほとんどで動作します。
ただし、一部のデバイス (Samsung Galaxy S2 など) では機能しません。
エラーコードが表示されますError (200,-82)
であることがわかりましたMEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK。それはどういう意味ですか?
そして、それを回避する方法は?

4

1 に答える 1

2

DOCが言うようにMEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK

ビデオはストリーミングされ、そのコンテナはプログレッシブ再生には無効です。つまり、ビデオのインデックス(moovアトムなど)がファイルの先頭にありません。

MediaPlayerは、ビデオの再生中にエラー状態に変化し、「このビデオを再生できません」ダイアログを表示することがよくあります。そのため、MediaPlayerエンジンをリセットした後、再生時間を記憶し、ビデオを再生することで、これらのエラーを処理する必要があります。

OnErrorListenerこのタイプのエラーを処理するためのコードを次のように実装でき ます。

private MediaPlayer.OnErrorListener mOnErrorListener = new MediaPlayer.OnErrorListener() {

 public boolean onError(MediaPlayer mp, int what, int extra) {

   switch (what) {

    case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
         Toast.makeText(PlayerActivity.this, "MEDIA_ERROR_SERVER_DIED",
                                                    Toast.LENGTH_SHORT).show();                         
         return true;
    case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:
        Toast.makeText(PlayerActivity.this,
                                            "MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK",
                                                    Toast.LENGTH_SHORT).show();
         break;
     case MediaPlayer.MEDIA_ERROR_UNKNOWN:
         Toast.makeText(PlayerActivity.this, "MEDIA_ERROR_UNKNOWN",
                                                    Toast.LENGTH_SHORT).show();
         break;
        }

         setProgressContainer(true, getString(R.string.msg_handle_error));
        int position=mVideoView.getCurrentPosition();
        if(position>0){
                   mCurPosition=position;
        }
         mVideoView.setVideoPath(mCurrentMediaUrl,position);

         return true;
         }

}; 
于 2012-05-28T09:14:13.280 に答える