如何获取 VideoView 的 buffering percent?

代码如下:

Uri uri = Uri.parse(URL);
video.setVideoURI(uri);
video.start();

我使用 VideoView 来播放一个流媒体格式的视频。
视频是一个 VideoView。
我想获取 buffering percent 像 MediaPlayer 中的 setOnBufferingUpdateListener。

MediaPlayer.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {
    @Override
    public void onBufferingUpdate(MediaPlayer mp, int percent) {
        //buffering is percent
    }
});

如何实现?

你可以使用 VideoView 的 setOnInfoListener 方法来监听视频缓冲状态。


具体来说,你可以这样做:

video.setOnInfoListener(new MediaPlayer.OnInfoListener() {
    @Override
    public boolean onInfo(MediaPlayer mp, int what, int extra) {
        if (what == MediaPlayer.MEDIA_INFO_BUFFERING_START) {
            // 开始缓冲
        } else if (what == MediaPlayer.MEDIA_INFO_BUFFERING_END) {
            // 缓冲结束
        } else if (what == MediaPlayer.MEDIA_INFO_BUFFERING_UPDATE) {
            // 缓冲进度更新
            int percent = extra;
        }
        return false;
    }
});

在这里,当视频开始缓冲时,what 参数的值为 MediaPlayer.MEDIA_INFO_BUFFERING_START;
当视频缓冲结束时,what 参数的值为 MediaPlayer.MEDIA_INFO_BUFFERING_END;
当视频缓冲进度更新时,what 参数的值为 MediaPlayer.MEDIA_INFO_BUFFERING_UPDATE,此时可以通过 extra 参数获取缓冲进度百分比。


你也可以使用 VideoView 的 setOnPreparedListener 方法来监听视频是否准备完毕。


具体来说,你可以这样做:

video.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        // 视频准备完毕,可以进行播放
    }
});

在这里,当视频准备完毕时,会回调 onPrepared 方法,你可以在这个方法里进行相应的操作。