2011-04-03 86 views

回答

10

源。这足以覆盖我的问题(播放按钮可绘制更改为暂停)

1

据我所知,目前还没有当视频开始在VideoView播放发送的事件,但我可以请考虑以下两种选择:

  1. 自己创建一个VideoView版本,在这种情况下发送事件。
  2. 使用的MediaController(这是默认VideoView)

如果你想跟随一个选项 - 你可以得到我结束了使用VideoView.setOnPreparedListener的VideoView from here

-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(); 
+1

OMG,请不要走这条路!你正在轮询一段时间(真)。这真的很糟糕。 – edoardotognoni 2014-07-25 15:43:01

+0

我同意@edoardotognoni – 2014-09-22 17:43:48

+0

答案的关键点不是循环部分,而是getCurrentPosition()方法。我只是想定期调用这个函数来检测视频是否启动。如果需要,可以使用不同的结构进行定期操作。但就像我说的,它不是“我的视频开始”问题 – 2014-09-25 09:03:17

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

这里我们就约MediaPlayer的一篇大文章 - http://www.malmstein.com/blog/2014/08/09/how-to-use-a-textureview-to-display-a-video-with-custom-media-player-controls/

您可以在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

谢谢,但不幸的是,它要求API> 16 – 2016-01-18 19:16:32

2

这里接受的答案不是100%准确的。

有时onprepared是第一帧正在渲染前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; 
      } 
     }); 

看到媒体信息documantaion的信息/警告的详细回调: https://developer.android.com/reference/android/media/MediaPlayer.html#MEDIA_INFO_VIDEO_RENDERING_START