-
Notifications
You must be signed in to change notification settings - Fork 8.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
向前拖动,进度条会往回跳 #313
Comments
如果seek很快完成,可能会消除这个问题。 那seek为什么会消耗这么长时间呢? 我播放的是本地视频。 |
|
UI部分seekbar的回调处理得不太合理,如果放手很快,最后一个位置不会被传给播放器,建议自行修改。 |
这个不是播放器内核问题,videoview相关你可以自己修改实现。 |
这段代码不是很明白,seekTo是发送命令,不怎么耗时,为什么要post到handler里面完成呢?并且延时200ms才去seek,请问一下这是基于什么考虑呢? 我这边能够直接调用seekTo吗? |
Here are my solution for this problem. private OnSeekBarChangeListener mSeekListener=new OnSeekBarChangeListener(){
long newposition;
public void onStartTrackingTouch(SeekBar bar){
show(3600000);
mDragging=true;
if(seekerBarDraggingListener!=null)
seekerBarDraggingListener.getCurrentDraggingstatus(mDragging);
// By removing these pending progress messages we make sure
// that a) we won't update the progress while the user adjusts
// the seekbar and b) once the user is done dragging the thumb
// we will post one of these messages to the queue again and
// this ensures that there will be exactly one message queued up.
mHandler.removeMessages(SHOW_PROGRESS);
}
public void onProgressChanged(SeekBar bar,int progress,boolean fromuser){
if(!fromuser){
// We're not interested in programmatically generated changes to
// the progress bar's position.
return;
}
long duration=mPlayer.getDuration();
newposition=(duration*progress)/1000L;
// 系统原来的实现是在progress改变的时候时刻都在进行videoplayer的seek
//这会导致seek m3u8切片文件的时候拖动seek时不准确,所以需要在拖动完成后才进行播放器的seekTo()
// mPlayer.seekTo((int) newposition);
if(mCurrentTime!=null)
mCurrentTime.setText(stringForTime((int)newposition));
}
public void onStopTrackingTouch(SeekBar bar){
mDragging=false;
mPlayer.seekTo((int)newposition);
if(seekerBarDraggingListener!=null)
seekerBarDraggingListener.getCurrentDraggingstatus(mDragging);
setProgress();
updatePausePlay();
if(isntNeedStayShowAfterDrag){
show(sDefaultTimeout);
// Ensure that progress is properly updated in the future,
// the call to show() does not guarantee this because it is a
// no-op if we are already showing.
mHandler.sendEmptyMessage(SHOW_PROGRESS);
}
}
}; |
我试过了这种方式,还是有问题,而且,项目需求是拖动进度条的时候视频画面要跟着动,所以必须在change的时候一直seek |
如果是这种需求那么得考虑一下如何寻找关键帧了, 而且和视频编码时的逻辑也有关系吧, 可以参考抖音和微信现在的视频裁剪功能看看, 两者应该直接用的 FFMpeg 处理了 |
没有开启精准seek吗? |
看来这个播放器还有很多问题啊。 |
设置mMediaController.setInstantSeeking(true); 拖动进度条时,发现进度条会往回跳。调试发现,seek开始到seek complete返回的时间有2秒多,setProgress拿到了pos和最新设置的pos不一致。比较系统或第三方播放器seek时都是非常流畅的。 请教一下,这个问题有办法改进吗? 我想实现边拖动,边预览的效果。
The text was updated successfully, but these errors were encountered: