问题是,我想在视频流开始播放视频时更改播放按钮暂停按钮,但我不知道如何检测该事件?
答案 0 :(得分:12)
这里有一篇关于MediaPlayer的精彩文章 - http://code.google.com/appengine/docs/java/tools/localunittesting.html
您可以在VideoView上设置infoListener
setOnInfoListener(new MediaPlayer.OnInfoListener() {
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) {
// Here the video starts
return true;
}
return false;
}
答案 1 :(得分:11)
我最终使用了VideoView.setOnPreparedListener。这足以掩盖我的问题(播放按钮可绘制的更改暂停)
答案 2 :(得分:5)
此处接受的答案并非100%准确。
有时准备就绪是在渲染第一帧之前3秒调用。我建议对该事件进行回调(MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START)
mMediaPlayer.setOnInfoListener(new MediaPlayer.OnInfoListener() {
@Override
public boolean onInfo(MediaPlayer mediaPlayer, int i, int i1) {
if (i == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START){
//first frame was bufered - do your stuff here
}
return false;
}
});
有关信息/警告的更多回调,请参阅media info documantaion: https://developer.android.com/reference/android/media/MediaPlayer.html#MEDIA_INFO_VIDEO_RENDERING_START
答案 3 :(得分:1)
据我所知,视频开始在VideoView中播放时没有发送任何事件,但我可以想到两个选项:
如果您想要关注第一选项 - 您可以获得VideoView from here
的来源答案 4 :(得分:-1)
可以调用isPlaying()来测试MediaPlayer对象是否在Started
中答案 5 :(得分:-1)
另一种检测videoview是否启动的方法是使用videoView.getCurrentPosition()。 getCurrentPosition()如果未启动流式传输,则返回0。
protected Runnable playingCheck = new Runnable() {
public void run() {
while (true) {
if (vw.getCurrentPosition() != 0) {
// do what you want when playing started
break;
} else {
try {
Thread.sleep(250);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
};
然后致电:
new Thread(playingCheck).start();
答案 6 :(得分:-1)
请试试这个:
final Handler h = new Handler();
h.postDelayed( new Runnable() {
public void run() {
if (videoView.getCurrentPosition() != 0) {
((ProgressBar) rootView.findViewById(R.id.pgStreaming)).setVisibility(View.GONE);
} else {
h.postDelayed(this, 250);
}
}
}, 250);