我需要一个 android 应用程序能够播放从时间 t1 到另一个时间 t2 的视频。基本上,这个视频是我应用程序中的一种“精灵”(它是一个 .mp4 视频 h264 基线编码)。
所以,我尝试了以下方法。按钮“下一步”在 t1 和 t2 之间播放视频。为了检查视频是否已经到达 t2,我使用了一个处理程序,每 20 毫秒调用一次 postDelayed。如果视频当前位置大于 t2,我停止视频。否则,我会在 20 毫秒内再次检查。
但它不起作用。由于我不明白的原因,我在 postDelayed 中读取的视频当前位置突然从一段时间变为几秒钟后。在我的屏幕上,视频正常播放。
一些代码:
// MainActivity
// setting up the video
vidView = (VideoView) findViewById(R.id.myVid);
vidView.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/raw/myvid"));
// wiring up Bt next
Button nextBt = (Button) findViewById(R.id.next);
nextBt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
playVideo();
}
});
和 playVideo 方法:
private void playVideo() {
// t1 and t2 are defined within MainActivity class
t1 = (int) (Math.random() * (80000));
t2 = t1 + (int) (Math.random() * (5000));
// we start at t1
vidView.seekTo(t1);
// We check video position in 20 ms
mHandler.postDelayed(new Runnable() {
public void run() {
int currentTime = vidView.getCurrentPosition();
Log.i("currentTime", String.valueOf(currentTime));
Log.i("T2", String.valueOf(t2));
// Ok, we can pause the video
if(currentTime > t2 - 20) {
vidView.pause();
}
// We check again in 20ms
else {
mHandler.postDelayed(this, 20);
}
}
}, 20);
vidView.start();
}
logCat 给了我(在这个例子中,T1 = 47286 和 T2 = 51478)
10-14 11:31:56.603: I/currentTime(3359): 47286 // first call to postDelayed, fine
10-14 11:31:56.603: I/T2(3359): 51478
10-14 11:31:56.623: I/currentTime(3359): 47286 // second call to postDelayed, still ok
10-14 11:31:56.623: I/T2(3359): 51478
10-14 11:31:56.653: I/currentTime(3359): 50000 // What? How the video current time can already be 3 seconds later?
10-14 11:31:56.653: I/T2(3359): 51478
你能告诉我我的代码有什么问题吗?谢谢!