2011-04-03 69 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

相關問題