I implemented my video player and seekbar as below and I found when seekTo() function is done the thumb(position) will be reset to 0 just after buffering ends. The thumb only stays on where I dragged to for a second and being reset.
However the video works fine, it starts playing from where I dragged to every time, so my question is why the thumb position is not consistent with player?
public int setVideoProgress(int currentProgress) {
if (mVideoView == null)
return -1;
long time = currentProgress > 0 ? currentProgress : mVideoView.getCurrentPosition();
long length = mVideoView.getDuration();
Log.v(TAG, "setVideoProgress: "+time);
// Update all view elements
mPlayerSeekbar.setMax((int) length);
mPlayerSeekbar.setProgress((int) time);
if (time >= 0) {
String progress = time + "/" + length;
mPlayerPosition.setText(progress);
}
Message msg = new Message();
msg.what = UPDATE_SEEKBAR;
if (mHandler != null)
mHandler.sendMessageDelayed(msg, 1000);
return (int) time;
}
private int mVideoProgress = 0;
private SeekBar.OnSeekBarChangeListener mSeekBarListener = new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
mVideoProgress = progress;
mHandler.removeMessages(HIDDEN_SEEKBAR);
Message msg = new Message();
msg.what = HIDDEN_SEEKBAR;
mHandler.sendMessageDelayed(msg, 3000);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
mVideoView.seekTo(mVideoProgress);
setVideoProgress(mVideoProgress);
}
};
private IMediaPlayer.OnPreparedListener mOnPreparedListener = new IMediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(IMediaPlayer mp) {
if (mVideoView != null) {
mVideoView.setVideoScalingMode(KSYMediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
mVideoView.start();
setVideoProgress(0);
}
}
};
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case UPDATE_SEEKBAR:
setVideoProgress(0);
break;
case HIDDEN_SEEKBAR:
mPlayerControlShow = false;
mPlayerControl.setVisibility(View.GONE);
break;
}
}
};
System logs as below:
08-11 23:06:19.193 20910-20910: setVideoProgress: 212743 (note: onStopTrackingTouch)
08-11 23:06:19.214 20910-20910: Buffering Start.
08-11 23:06:19.567 20910-20910: Buffering End.
08-11 23:06:19.682 20910-20910: setVideoProgress: 14 (reset to start point somehow)