玩轉Android之線上視頻播放控制項Vitamio的使用

來源:互聯網
上載者:User

標籤:表示   網路訪問   blog   完整   boa   方法表   idt   hub   data   

其實Android中內建的MediaPlayer本身就能播放線上視頻,MediaPlayer結合SurfaceView播放線上視頻也是不錯的選擇(如果你沒有效能或者使用者體驗上的要求),關於MediaPlayer+SurfaceView播放線上視頻我後面會給筒子們詳細介紹,這裡我想先說一下一個第三方的視頻播放控制項Vitamio的使用,這個控制項用起來還是非常方便的,而且效能也不錯,OK,廢話不多說,先來看看我們今天的一個。

OK,這是一段網路視頻,當視頻處於緩衝狀態時,會提示使用者目前緩衝的百分比以及當前的下載網速,我們就來看看這麼一個效果該怎麼實現。

1.準備工作1.視頻網址
http://112.253.22.157/17/z/z/y/u/zzyuasjwufnqerzvyxgkuigrkcatxr/hc.yinyuetai.com/D046015255134077DDB3ACA0D7E68D45.flv
2.下載Vitamio庫

Vitamiohttps://github.com/yixia/VitamioBundle

Vitamio官網地址https://www.vitamio.org/?locale=zh-CN

其實官網並沒有什麼卵用,連個Demo都沒有,大家只需要去GitHub上下載Vitamio庫檔案即可。

3.匯入Vitamio庫

匯入庫,這個很簡單吧,和筒子們匯入其他庫的方式一樣,不贅述(這裡有疑問歡迎留言討論)。

4.在已建立的App中引用該庫檔案2.播放網路視頻

第一步的工作完成之後,接下來我們就可以開始使用Vitamio了,首先在布局檔案中來引用Vitamio,如下:

[java] view plain copy print?
  1. <io.vov.vitamio.widget.VideoView  
  2.     android:id="@+id/vitamio"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="200dp"  
  5.     android:layout_marginTop="24dp"/>  

然後在Activity中來尋找Vitamio,Vitamio在使用之前必須對其進行初始化操作,調用Vitamio.initialize(this)方法可對其進行初始化操作,該方法有一個傳回值表示初始化是否成功,當初始化成功後我們再來進行進一步的操作。代碼如下: [java] view plain copy print?
  1. if (Vitamio.initialize(this)) {  
  2.             VideoView videoView = (VideoView) findViewById(R.id.vitamio);  
  3.             videoView.setVideoURI(Uri.parse("http://112.253.22.157/17/z/z/y/u/zzyuasjwufnqerzvyxgkuigrkcatxr/hc.yinyuetai.com/D046015255134077DDB3ACA0D7E68D45.flv"));  
  4.             MediaController controller = new MediaController(this);  
  5.             videoView.setMediaController(controller);  
  6.             videoView.start();  
  7.         }  

Vitamio中的VideoView和Android內建的VideoView的用法基本一致,就是匯入的包不同罷了,setVideoURI方法給VideoView設定一個網路播放地址,MediaController是一個播放控制器(這個東西不是必須設定的,看需求),設定完這些之後,直接調用videoView的start方法就可以播放視頻了(注意添加網路存取權限)。
3.顯示緩衝百分比以及下載網速

完成第二部,視頻播放已經沒有問題了,但是如果筒子們想要在視頻緩衝的過程中顯示緩衝百分比以及下載速率該怎麼辦呢?這個也簡單。首先緩衝百分比和下載速率是顯示在兩個TextView上的,而且這兩個TextView都顯示在VideoView的左上方,那麼我們來看看完整的布局 檔案應該是什麼樣子:

[java] view plain copy print?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout  
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     xmlns:tools="http://schemas.android.com/tools"  
  5.     android:layout_width="match_parent"  
  6.     android:layout_height="match_parent"  
  7.     tools:context="lenve.vitamio.MainActivity">  
  8.   
  9.     <io.vov.vitamio.widget.VideoView  
  10.         android:id="@+id/vitamio"  
  11.         android:layout_width="match_parent"  
  12.         android:layout_height="200dp"  
  13.         android:layout_marginTop="24dp"/>  
  14.   
  15.     <TextView  
  16.         android:id="@+id/buffer_percent"  
  17.         android:layout_width="wrap_content"  
  18.         android:layout_height="wrap_content"  
  19.         android:layout_alignTop="@id/vitamio"  
  20.         android:layout_marginLeft="12dp"  
  21.         android:textColor="#e6ff01"/>  
  22.   
  23.     <TextView  
  24.         android:id="@+id/net_speed"  
  25.         android:layout_width="wrap_content"  
  26.         android:layout_height="wrap_content"  
  27.         android:layout_alignTop="@id/vitamio"  
  28.         android:layout_marginLeft="12dp"  
  29.         android:layout_toRightOf="@id/buffer_percent"  
  30.         android:textColor="#04fa00"/>  
  31.   
  32. </RelativeLayout>  

然後在Activity中尋找到這兩個控制項: [java] view plain copy print?
  1. //顯示緩衝百分比的TextView  
  2. percentTv = (TextView) findViewById(R.id.buffer_percent);  
  3. //顯示下載網速的TextView  
  4. netSpeedTv = (TextView) findViewById(R.id.net_speed);  

然後調用VideoView中的兩個監聽器,第一個如下: [java] view plain copy print?
  1. videoView.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {  
  2.                 @Override  
  3.                 public void onBufferingUpdate(MediaPlayer mp, int percent) {  
  4.                     percentTv.setText("已緩衝:" + percent + "%");  
  5.                 }  
  6.             });  

這個方法表示監聽緩衝百分比,裡邊的percent參數就表示當前緩衝百分比。

第二個監聽器如下:

[java] view plain copy print?
  1. videoView.setOnInfoListener(new MediaPlayer.OnInfoListener() {  
  2.     @Override  
  3.     public boolean onInfo(MediaPlayer mp, int what, int extra) {  
  4.         switch (what) {  
  5.             //開始緩衝  
  6.             case MediaPlayer.MEDIA_INFO_BUFFERING_START:  
  7.                 percentTv.setVisibility(View.VISIBLE);  
  8.                 netSpeedTv.setVisibility(View.VISIBLE);  
  9.                 mp.pause();  
  10.                 break;  
  11.             //緩衝結束  
  12.             case MediaPlayer.MEDIA_INFO_BUFFERING_END:  
  13.                 percentTv.setVisibility(View.GONE);  
  14.                 netSpeedTv.setVisibility(View.GONE);  
  15.                 mp.start();  
  16.                 break;  
  17.             //正在緩衝  
  18.             case MediaPlayer.MEDIA_INFO_DOWNLOAD_RATE_CHANGED:  
  19.                 netSpeedTv.setText("當前網速:" + extra + "kb/s");  
  20.                 break;  
  21.         }  
  22.         return true;  
  23.     }  
  24. });  

這個監聽器我們可以用來監聽緩衝的整個過程,what參數表示緩衝的時機,extra參數表示當前的下載網速,根據what參數我們可以判斷出當前是開始緩衝還是緩衝結束還是正在緩衝,開始緩衝的時候,我們將左上方的兩個控制項顯示出來,同時讓播放器暫停播放,緩衝結束時將左上方兩個控制項隱藏起來,同時播放器開始播放,正在緩衝的時候我們就來顯示當前的下載網速。

OK,這個就是Vatamio一個基本的用法,Vitamio大多數API都和原生的VideoView的API一致,這裡我就不再贅述。

源碼下載(由於CSDN對上傳檔案大小有限制,我只上傳了My Code的Module,大家下載demo之後需要自己下載Vitamio並引入,工程方可運行)http://download.csdn.net/detail/u012702547/9510217

 

以上。

 

玩轉Android之線上視頻播放控制項Vitamio的使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.