这个问题通常是因为视频的缓冲时间或者网络延迟时间过长,而导致的实际视频时长超过了预先记录的时间。解决方法可以是设置视频缓冲时间或者实现网络延迟控制。
代码示例:
//设置视频缓冲时间 VideoView videoView = (VideoView) findViewById(R.id.videoView); videoView.setVideoPath("VIDEO_URL"); videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mp.setLooping(true); int duration = mp.getDuration(); //设置缓冲时间为1秒 int seek = duration/1000 - 1; videoView.seekTo(seek*1000); videoView.start(); } });
//实现网络延迟控制 OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new Interceptor() { @Override public okhttp3.Response intercept(Chain chain) throws IOException { Request request = chain.request(); long t1 = System.nanoTime(); okhttp3.Response response = chain.proceed(request); long t2 = System.nanoTime(); Log.d("TAG", "intercept: time=" + (t2 - t1) / 1e6d + "ms"); return response; } }) .build();
Request request = new Request.Builder() .url("VIDEO_URL") .build();
client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
InputStream inputStream = response.body().byteStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) != -1) {
baos.write(buffer, 0, len);
SystemClock.sleep(10);//增加网络延迟时间
}
baos.flush();
inputStream.close();
byte[] result = baos.toByteArray();
runOnUiThread(new