Android 視頻播放與進度條同步

來源:互聯網
上載者:User

首先擷取視頻播放長度來設定SeekBar的Max,videobBar.setMax(mediaPlayer.getDuration()),然後通過線程即時擷取視頻已經播放的時間來更新SeekBar,videobBar.setProgress(mediaPlayer.getCurrentPosition())思路就是這樣,具體代碼如下:

videobBar=(SeekBar)findViewById(R.id.seekBarPlayProgress);

surfaceView = (SurfaceView) findViewById(R.id.player);
  surfaceView.getHolder().addCallback(new PlayCallback());
  surfaceView.getHolder()
    .setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  surfaceView.getHolder().setFixedSize(surfaceView.getWidth(), surfaceView.getHeight());
  mediaPlayer = new MediaPlayer();
  mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
  mediaPlayer.setDisplay(surfaceView.getHolder());
  try{
   mediaPlayer.setDataSource("/sdcard/movie/自娛自樂_1.mp4");
   mediaPlayer.prepare();
   mediaPlayer.start();
   videobBar.setMax(mediaPlayer.getDuration());

   VideoThreed videoThreed=new VideoThreed();
   videoThreed.start();
  }
  catch(Exception e)
  {
   Toast.makeText(this, "播放錯誤!", Toast.LENGTH_LONG).show();
  }

 

 

//更新UI
  Handler myHandler = new Handler()
  {
   public void handleMessage(Message msg)
   { 
             switch (msg.what)
             {  
             case PROGRESS_CHANGED:  
                 videobBar.setProgress(mediaPlayer.getCurrentPosition());
                 break;
           }
        }
    };

//視頻進度條更新
 class VideoThreed extends Thread
 {
  public void run()
  {
    while (!Thread.currentThread().isInterrupted())
    {   
     if(mediaPlayer.getCurrentPosition()==mediaPlayer.getDuration())
     {
      return;
     }
                 Message message = new Message();  
                 message.what =PROGRESS_CHANGED;  
                 VideoPlayer.this.myHandler.sendMessage(message);  
                 try
                   {  
                        Thread.sleep(1000);   
                   }
                 catch (InterruptedException e)
                   {  
                        Thread.currentThread().interrupt();  
                   }  
              }  
  }
 }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.