Android VideoView MediaPlayer OnInfoListener - 未触发的事件

Nab*_*bil 8 android video-streaming android-mediaplayer

下面给出了以下源代码片段:

videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mediaPlayer) {

            mediaPlayer.setOnInfoListener(new MediaPlayer.OnInfoListener() {
                @Override
                public boolean onInfo(MediaPlayer mp, int what, int extra) {
                    if (what == MediaPlayer.MEDIA_INFO_BUFFERING_END){
                        activity.dismissDialog(DialogID.DIALOG_LOADING);
                        return true;
                    } 
                    return false;
                }
            });
        }
    });
Run Code Online (Sandbox Code Playgroud)

我正在使用Android 3.x +设备传输HLS流,并在缓冲完成后尝试隐藏加载对话框.视频流有效,但信息事件永远不会被触发.

有任何想法吗?

Vis*_*war 0

您可以在 videoView 上设置 OnPreparedListener 因为它是您的对象,但如果您查看VideoView的源,您会发现 mMediaPlayer 是其私有成员,因此您从外部所做的任何更改都不会应用于它。

根据您的要求,您需要缓冲状态,以便您可以拥有线程或处理程序或其他东西,以便您可以更新 UI 以获取缓冲区状态,有一种方法

int percent = videoView.getBufferPercentage();

if(percent == 100){
// buffering done 
} 
Run Code Online (Sandbox Code Playgroud)

  • 读一下赏金笔记,这不是他想要的:_“我不想要一个解决方案 * 轮询查看播放头以检查进度 * 使用 onBufferUpdate 来估计(基于 SO 上的旧帖子)这不准确。"_ (2认同)