Java 有没有更好的方法来代替videoview.seekto()?
在这里,我们想播放一些其他视频,其中主视频到达某个精确的时间点。由于videoview.seekTo无法实现我们想要的,我们必须运行一个线程,通过videoview.getCurrentPosition捕捉时间点,这正是我们所知道的。 事实上,我们只能使用start()和pause(),而不是使用seekTo(当其他视频准备开始或刚刚完成时)使视频从正确的时间点继续。 以下是我们的努力Java 有没有更好的方法来代替videoview.seekto()?,java,android,android-videoview,Java,Android,Android Videoview,在这里,我们想播放一些其他视频,其中主视频到达某个精确的时间点。由于videoview.seekTo无法实现我们想要的,我们必须运行一个线程,通过videoview.getCurrentPosition捕捉时间点,这正是我们所知道的。 事实上,我们只能使用start()和pause(),而不是使用seekTo(当其他视频准备开始或刚刚完成时)使视频从正确的时间点继续。 以下是我们的努力 private VideoView vv; public void load(String url) {
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++));
}
};
private VideoView vv;
公共无效加载(字符串url){
if(null!=代理)
proxy.destory();
代理=新的HttpGetProxy1(9980);
this.url=proxy.getLocalURL(url,true);
vv.setVideoPath(this.url);
setOnCompletionListener(新的MediaPlayer.OnCompletionListener(){
@凌驾
完成时的公共作废(MediaPlayer mp){
Log.e(“未完成”);
state=VideoState.stop;
ivStart.setVisibility(View.VISIBLE);
ivStop.setVisibility(视图不可见);
ivPause.setVisibility(视图.不可见);
if(null!=回调)
callback.onComplete();
}
});
setOnPreparedListener(新的OnPreparedListener(){
@凌驾
已准备好公开作废(MediaPlayer mp){
}
});
vv.setOneRorListener(新的OneRorListener(){
@凌驾
公共布尔onError(MediaPlayer mp,int what,int extra){
Log.e(“SetOneErrorListener:“+what+”-“+extra”);
加载(ComponentVideo1.this.url);
返回false;
}
});
clearTimer();
if(null==callback | | null==questions | | questions.size()==0)
handler.post(可运行);
}
私有处理程序=新处理程序();
private Runnable Runnable=new Runnable(){
公开募捐{
setText(getTimeFormat(vv.getCurrentPosition())+“/”+getTimeFormat(vv.getDuration());
handler.postDelayed(这个,100);
if(null==vv | | null==callback | | null==questions | | questions.size()==0 | | index>=questions.size())
返回;
if(vv.getCurrentPosition()
为了实现这一点,在runnable中,后延迟时间从500减少到100(0.5s减少到0.1s),但每0.1s运行一次方法的压力很大。
更令人失望的是,我们需要对要播放的每个视频资源进行更改此代码片段来自onCreate中的按钮单击侦听器。它用于查找和暂停少量时间,大约几百毫秒。它会更新一个文本框,直到视频视图在所需时间播放,然后暂停
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();
public void onClick(视图v){
如果(!checkBox1.isChecked()&&loaded1){
if(frame1Advanced)msec=videoView.getCurrentPosition();
msec+=msecAdd;
videoView.requestFocus();
videoView.start();
而(videoView.getCurrentPosition()<(msec-20)){
textView1.setText(getMilliToString(videoView.getCurrentPosition())+“+”+(int)(videoView.getCurrentPosition()-msec));
}
videoView.pause();
感谢您的回答,但不幸的是,我们必须在主视频上设置一个侦听器,并被动引导到新视频。自愿活动无法与之匹配。如果我们将“while”循环设置为runnable…这似乎是一个不错的选择,我们将尝试一下。