如何检测VideoView何时开始播放(Android)?

时间:2011-04-03 12:29:05

标签: android events android-videoview

问题是,我想在视频流开始播放视频时更改播放按钮暂停按钮,但我不知道如何检测该事件?

7 个答案:

答案 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中播放时没有发送任何事件,但我可以想到两个选项:

  1. 自己创建一个VideoView版本,在这种情况下发送事件。
  2. 使用MediaController(VideoView中的默认设置)
  3. 如果您想要关注第一选项 - 您可以获得VideoView from here

    的来源

答案 4 :(得分:-1)

可以调用isPlaying()来测试MediaPlayer对象是否在Started

Android MediaPlayer.isPlaying()

答案 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);