在这里,我们想播放一些其他视频,其中主要视频来到某个确切的时间点。由于videoview.seek无法达到我们想要的效果,我们必须通过videoview.getCurrentPosition运行一个线程来捕捉时间点,这一点我们都知道。 事实上,我们只能使用start()和pause()而不是使用seekTo(当其他视频准备开始或刚刚完成时),以使视频从正确的时间点继续。 以下是我们的努力。
private VideoView vv;
public void load(String url) {
if (null != proxy)
proxy.destory();
proxy = new HttpGetProxy1(9980);
this.url = proxy.getLocalURL(url, true);
vv.setVideoPath(this.url);
vv.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
Log.e("onCompletion");
state = VideoState.stop;
ivStart.setVisibility(View.VISIBLE);
ivStop.setVisibility(View.INVISIBLE);
ivPause.setVisibility(View.INVISIBLE);
if (null != callback)
callback.onComplete();
}
});
vv.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
}
});
vv.setOnErrorListener(new OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
Log.e("setOnErrorListener:" + what + "-" + extra);
load(ComponentVideo1.this.url);
return false;
}
});
clearTimer();
if (null == callback || null == questions || questions.size() == 0)
handler.post(runnable);
}
private Handler handler = new Handler();
private Runnable runnable = new Runnable() {
public void run() {
timeFormat.setText(getTimeFormat(vv.getCurrentPosition()) + "/" + getTimeFormat(vv.getDuration()));
handler.postDelayed(this, 100);
if (null == vv || null == callback || null == questions || questions.size() == 0 || index >= questions.size())
return;
if (vv.getCurrentPosition() < questions.get(index).getMsec())
return;
callback.call(questions.get(index++));
}
};
为了达到这个目的,在runnable中,postDelay时间从500减少到100(0.5s到0.1s)。但每0.1秒运行一次方法的压力很大。 更令人失望的是我们需要对我们要播放的每个视频资源进行更改
答案 0 :(得分:0)
此代码片段来自onCreate中的Button click侦听器。它用于寻找和暂停少量时间,大约几百毫秒。它会更新文本框,直到视频视图播放所需的时间,然后暂停。
public void onClick(View v) {
if (!checkBox1.isChecked()&&loaded1) {
if (frame1Advanced) msec = videoView.getCurrentPosition();
msec += msecAdd;
videoView.requestFocus();
videoView.start();
while (videoView.getCurrentPosition() < (msec-20)) {
textView1.setText(getMilliToString(videoView.getCurrentPosition())+ "+" + (int)(videoView.getCurrentPosition() - msec));
}
videoView.pause();