Android VideoView触发OnPreparedListener对于HLS来说太早
我想在用户等待VideoView开始播放HLS时向他显示一些ProgressDialog。我尝试使用OnPreparedListener来实现这一点,但他会提前触发(在播放器下载m3u8文件后,而不是在视频启动时)Android VideoView触发OnPreparedListener对于HLS来说太早,android,http-live-streaming,Android,Http Live Streaming,我想在用户等待VideoView开始播放HLS时向他显示一些ProgressDialog。我尝试使用OnPreparedListener来实现这一点,但他会提前触发(在播放器下载m3u8文件后,而不是在视频启动时) 我没有找到另一个合适的listner。。。也许有谁知道这个问题?谢谢大家。我用下一个黑客解决了我的问题: videoView.setOnPreparedListener(new OnPreparedListener() { public void onPrepared(Med
我没有找到另一个合适的listner。。。也许有谁知道这个问题?谢谢大家。我用下一个黑客解决了我的问题:
videoView.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
final Handler handler = new Handler();
videoPositionThread = new Runnable() {
public void run() {
try {
int duration = videoView.getCurrentPosition();
if (!(videoPosition == duration && videoView.isPlaying())) {
progress.dismiss();
}
videoPosition = duration;
handler.postDelayed(videoPositionThread, 1000);
} catch (IllegalArgumentException e) {
Log.d(TAG, e.getMessage(), e);
}
}
};
handler.postDelayed(videoPositionThread, 0);
}
});
我也经历过同样的问题,只是找到了一个适合我需要的解决方案。也许这对你也有用。至少它已经在安卓2.2、2.3和4.2上测试并运行 其想法是定期检查videoView当前位置是否大于零。这是对米哈伊尔答案的修改。也要感谢米哈伊尔:)
去找Handler.PostDelayed()你能帮我吗?什么是videoPosition?我不知道为什么我的videoview会在超过15秒或20秒的延迟后显示实时视频流。
videoView.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
final Handler handler = new Handler();
videoPositionThread = new Runnable() {
public void run() {
try {
int duration = videoView.getCurrentPosition();
if (!(videoPosition == duration && videoView.isPlaying())) {
progress.dismiss();
}
videoPosition = duration;
handler.postDelayed(videoPositionThread, 1000);
} catch (IllegalArgumentException e) {
Log.d(TAG, e.getMessage(), e);
}
}
};
handler.postDelayed(videoPositionThread, 0);
}
});
public class VideoViewActivity extends Activity {
// Declare variables
ProgressDialog pDialog;
VideoView videoview;
Runnable videoPositionThread;
// Insert your Video URL
String VideoURL = "enter your video rtsp url here";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.videoview_main);
videoview = (VideoView) findViewById(R.id.VideoView);
pDialog = new ProgressDialog(VideoViewActivity.this);
pDialog.setTitle("Android Video Streaming Tutorial");
pDialog.setMessage("Buffering...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
Uri video = Uri.parse(VideoURL);
videoview.setVideoURI(video);
videoview.start();
final Handler handler = new Handler();
videoPositionThread = new Runnable() {
public void run() {
int currentPosition = videoview.getCurrentPosition();
if (currentPosition > 0)
pDialog.dismiss();
else
handler.postDelayed(videoPositionThread, 1000);
}
};
handler.postDelayed(videoPositionThread, 0);
}
}