Seekbar being reset to 0 every time when seekTo() is called

417 Views Asked by At

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)
0

There are 0 best solutions below