How to detect when VideoView starts playing (Android)?

余生颓废 提交于 2019-12-10 02:38:54

问题


Here's the problem, I want to change play button to pause button when the video stream starts playing in videoview but I don't know how to detect that event?


回答1:


There is a great article about MediaPlayer in here - http://www.malmstein.com/blog/2014/08/09/how-to-use-a-textureview-to-display-a-video-with-custom-media-player-controls/

You can set infoListener on your VideoView

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;
    }



回答2:


I ended up using VideoView.setOnPreparedListener. This was enough to cover my problem (play button drawable change to pause)




回答3:


accepted answer here is not 100% accurate.

sometimes onprepared is call 3 seconds before first frame is being rendered. i suggest having a callback on that event (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;
    }
});

see media info documantaion for more callbacks of info/warning: https://developer.android.com/reference/android/media/MediaPlayer.html#MEDIA_INFO_VIDEO_RENDERING_START




回答4:


As far as I know, there is no event sent when video start playing in VideoView, but I can think of two options:

  1. Create a version of VideoView by yourself, that sends event in those cases.
  2. Use MediaController (which is default in VideoView)

If you want to follow option one - you can get the source of VideoView from here




回答5:


isPlaying() can be called to test whether the MediaPlayer object is in the Started

Android MediaPlayer.isPlaying()




回答6:


Another way to detect if videoview started is using videoView.getCurrentPosition(). getCurrentPosition() returns 0 if streaming not started.

    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();
                    }
                }
            }
        }
    };

Then call:

new Thread(playingCheck).start();



回答7:


Please try this :

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


来源:https://stackoverflow.com/questions/5529572/how-to-detect-when-videoview-starts-playing-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!