【问题标题】:How to detect if VideoView is playing video or Buffering?如何检测 VideoView 是在播放视频还是在缓冲?
【发布时间】:2013-04-11 06:21:32
【问题描述】:

如何检测 VideoView 是在播放视频还是在缓冲?
我想显示一个弹出窗口,说视频正在缓冲。

在 android API 级别 17 中有一个回调 setOnInfoListener 可以为我提供此信息,但我使用的是 API 级别 15 (android ICS)。

我也看到过这个问题“Detect if a VideoVIew is buffering”,但建议的解决方案是针对MediaPlayer,而不是针对VideoView

那么如何检测 VideoView 是否正在缓冲?运行一个线程来检查当前的搜索/进度级别并根据它决定视频是正在播放还是正在缓冲是一个很好的解决方案。

更新

这不像我只需要在视频开始时检查视频是否正在播放或缓冲,我想通过视频支付来检查它。

【问题讨论】:

    标签: android android-videoview


    【解决方案1】:

    要检查 VideoView 是否正在播放,可以使用它的 isPlaying() 方法,

    if ( videoView.isPlaying() )
    {
         // Video is playing
    }
    else
    {
         // Video is either stopped or buffering
    }
    

    要检查 VideoView 是否完成,请使用以下命令,

    videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
    {
        @Override
        public void onCompletion(MediaPlayer mp) 
        {
                 // Video Playing is completed
        }
    });
    

    【讨论】:

    • 我们需要将videoView.isPlaying()添加到一个计时器中以继续检查视频是否正在缓冲,或者我们需要设置setOnBufferingUpdateListener来检查它是否处于缓冲模式。
    【解决方案2】:

    为了不实现自定义 VideoView,我使用了以下 hack。这个想法是每 1 秒检查一次当前位置是否与前 1 秒相同。如果是,则视频正在缓冲。如果没有,则视频正在播放。

    final Handler handler = new Handler(); 
    Runnable runnable = new Runnable() { 
        public void run() {
            int duration = videoView.getCurrentPosition();
            if (old_duration == duration && videoView.isPlaying()) {
                videoMessage.setVisibility(View.VISIBLE);
            } else {
                videoMessage.setVisibility(View.GONE);
            }
            old_duration = duration;
    
            handler.postDelayed(runnable, 1000);
        }
    };
    handler.postDelayed(runnable, 0);
    

    【讨论】:

      【解决方案3】:
                 videoView.setOnPreparedListener(new OnPreparedListener()
                 {
      
                     public void onPrepared(MediaPlayer mp)
                     {                  
                         progressDialog.dismiss();     // or hide any popup or what ever
                         videoView.start();           // start the video
                     }
                 });  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多