VideoView触发preparedListener为时过早HLS [英] VideoView triggers OnPreparedListener too early for HLS
本文介绍了VideoView触发preparedListener为时过早HLS的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想告诉用户一些ProgressDialog,而他等待VideoView开始播放HLS。我尝试使用在preparedListener这一点,但他触发提前(后玩家下载M3U8文件,而不是当视频开始)。
I want to show user some ProgressDialog while he waits for VideoView to start play HLS. I try to use OnPreparedListener for this, but he triggers to early (after player downloaded m3u8 file, not when video started).
VideoView player = (VideoView) findViewById(R.id.player);
String httpLiveUrl = "http://example.com/playlist.m3u8";
player.setVideoURI(Uri.parse(httpLiveUrl));
player.setMediaController(new MediaController(this));
player.requestFocus();
player.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
progress.dismiss();
}
});
progress.show();
player.start();
我没有找到其他合适的听者......可能是任何人都知道SLOUTION?
I didn't find another suitable listner... May be anyone knows sloution?
推荐答案
感谢所有。我解决了我的问题,接下来黑客:
Thanks to all. I solved my problem with next hack:
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);
}
});
这篇关于VideoView触发preparedListener为时过早HLS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文