У меня есть VideoView, который воспроизводится из внутренней памяти. Пока мое видео воспроизводит журналы VideoView MediaPlayer: error (1, -1004)
. У меня есть onErrorListener, прикрепленный к VideoView, откуда я хотел бы управлять этой ошибкой. То, что я собираюсь сделать, состоит в том, чтобы получить последнюю позицию (от getCurrentPosition()
) и снова начать мой игрок с этой позиции, используя seekTo(int position)
. Мой видеофайл действителен (подтверждается игрой на других игроках). Моя проблема теперь в том, чтобы получить последнюю действительную позицию из VideoView. Вызов getCurrentPosition()
из onError (MediaPlayer mp, int what, int extra) возвращает 0, когда я делаю mp.getCurrentPosition/mVideoView.getCurrentPosition()
(совершенно справедливо). Как мне отслеживать текущую позицию игрока во время игры?Android - VideoView, получив текущую позицию в качестве видео?
Вот мой код:
mVideoView.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
switch (what) {
case MediaPlayer.MEDIA_ERROR_UNKNOWN:
Log.v("error", "media error unknown");
mediaErrorExtra(mp, extra, path);
break;
case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
Log.v("error", "media error server died");
mediaErrorExtra(mp, extra, path);
break;
}
return true;
}
});
private void mediaErrorExtra(MediaPlayer mp, int extra, String path){
switch(extra){
case MediaPlayer.MEDIA_ERROR_IO:
if(!mp.isPlaying()){
Integer currentposition = mVideoView.getCurrentPosition();
if(currentposition != null){
Log.v("currentpos",Integer.toString(currentposition));
}
mVideoView.setVideoPath(path);
mVideoView.start();
//mVideoView.seekTo(currentposition);
}
break;
case MediaPlayer.MEDIA_ERROR_MALFORMED:
Log.v("error extra","media error malformed");
break;
case MediaPlayer.MEDIA_ERROR_UNSUPPORTED:
Log.v("error extra","media error unsupported");
break;
case MediaPlayer.MEDIA_ERROR_TIMED_OUT:
Log.v("error extra","media error timed out");
break;
}
}
Кроме того, есть ли слушатель, который обеспечивает текущую позицию игрока в то время как он играет? Я мог бы использовать while(isPlaying()){int currentposition = mVideoView.getCurrrentPosition()}
, но я полагаю, что это плохой способ обойти вещи. Любое предложение было бы наиболее оценено. Заранее спасибо.
не может решить символ 'ScheduledExecutor' – NarendraJi