android-VideoView和MediaPlayer seekTo始终从头开始
作者:互联网
寻找在VideoView中播放的视频并将其恢复时遇到一些问题.
这是我的代码的一部分:
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
mp.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
@Override
public void onSeekComplete(MediaPlayer mp) {
Log.d("V", "onSeekComplete1 " + videoView.getCurrentPosition());
videoView.start();
Log.d("V", "onSeekComplete1 " + videoView.getCurrentPosition());
}
});
}
});
videoView.setVideoURI('some local uri');
在某些时候,我正在暂停使用以下视频:
videoView.pause();
单击按钮后,我正在寻找特定时间的视频,例如. 10秒(10000毫秒).
@OnClick(R2.id.ivMove)
void clickMove() {
videoView.seekTo(10000);
}
之后,我在日志中看到:
onSeekComplete1 10000
onSeekComplete2 0
因此,在调用videoView.start()之后,它从头开始播放视频!
但是,当我在不寻求视频的情况下调用start()时(例如,一个按钮调用了pause(),第二个按钮调用了start(),则视频正在正确播放-从暂停的那一刻开始,而不是从开始.
你能告诉我我在做什么错吗?
解决方法:
问题是由MediaPlayer引起的-它正在寻求最接近视频的关键帧,事实证明我的测试视频每30秒就有一个关键帧.
我更改为ExoPlayer https://github.com/google/ExoPlayer-它可以寻求准确的时间.
标签:android-mediaplayer,android-videoview,android 来源: https://codeday.me/bug/20191111/2018304.html