내부 메모리에서 재생되는 VideoView가 있습니다. 비디오가 재생되는 동안 VideoView 로그에 MediaPlayer: error (1, -1004)
이 기록됩니다. 이 오류를 관리하려는 VideoView에 onErrorListener가 연결되어 있습니다. 내가하고자하는 일은 마지막 위치 (getCurrentPosition()
)를 얻고 seekTo(int position)
을 사용하여 그 위치에서 선수를 다시 시작하는 것입니다. 내 비디오 파일이 유효합니다 (다른 플레이어에서 재생하여 확인). 내 문제는 이제 VideoView에서 마지막으로 유효한 위치를 얻는 것입니다. mp.getCurrentPosition/mVideoView.getCurrentPosition()
(상당히 바르게)을 수행하면 onError (MediaPlayer mp, int what, int extra)에서 getCurrentPosition()
을 호출하면 0이 반환됩니다. 재생되는 동안 플레이어의 현재 위치를 계속 추적하려면 어떻게해야합니까?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