我有一个简单的VideoView
,我正在尝试从网址流式传输视频。这是我的代码:
//everything is in onCreate()
videoView = (VideoView)findViewById(R.id.video);
String videoAddress = "https://archive.org/download/ksnn_compilation_master_the_internet/ksnn_compilation_master_the_internet_512kb.mp4";
Uri videoUri = Uri.parse(videoAddress);
videoView.setVideoURI(videoUri);
videoView.start();
videoController = new MediaController(this);
videoController.setAnchorView(videoView);
videoView.setMediaController(videoController);
问题:
启动视频需要近7-8秒。保持缓冲直到那时。
这不是关于互联网连接,因为我在浏览器中在同一个互联网上同时播放相同的视频。 (与应用程序并行运行浏览器)。在浏览器中启动视频只需1-2秒。
我也从不同的来源尝试过其他几个视频,我在所有这些视频中都面临着这种滞后。
类似的问题已在SO上多次询问,但没有答案。
答案 0 :(得分:0)
问题是,我正在UI线程中做所有事情,这需要很长时间。在AsyncTask
中完成所有事情,事情会顺利进行。
对于初学者,this link介绍了如何在AsyncTask
中执行此操作。
定义一个扩展AsyncTask
:
public class BackgroundAsyncTask extends AsyncTask<String, Uri, Void> {
Integer track = 0;
ProgressDialog dialog;
protected void onPreExecute() {
dialog = new ProgressDialog(PlayVideo.this);
dialog.setMessage("Loading, Please Wait...");
dialog.setCancelable(true);
dialog.show();
}
protected void onProgressUpdate(final Uri... uri) {
try {
media=new MediaController(PlayVideo.this);
video.setMediaController(media);
media.setPrevNextListeners(new View.OnClickListener() {
@Override
public void onClick(View v) {
// next button clicked
}
}, new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
media.show(10000);
video.setVideoURI(uri[0]);
video.requestFocus();
video.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer arg0) {
video.start();
dialog.dismiss();
}
});
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
protected Void doInBackground(String... params) {
try {
Uri uri = Uri.parse(params[0]);
publishProgress(uri);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
然后,在onCreate()
方法中,只需调用此execute()
的{{1}}方法:
BackgroundAsynchTask