Android專案之android SDK視訊播放與vitamio視訊播放
前言:
今天我想給大家分享Android的視訊播放!如今我又想起了當初我做的那個專案,那是接我姐夫單做的,不是很大的專案,我用了差不多半個月的時間完成了需求,現在回想起來真的不夠完美,覺得虧待了我姐夫,保證下次做好點!!!為啥這樣說呢?沒錯,就是視訊播放這一塊沒做完美,當時的需求是要連線一個網路視訊用來做空閒時播放的廣告,視訊是flv格式了,我當時沒做過支援flv格式的播放器,以為大同小異完全沒問題,後來的後來我錯了,還不停地找百度找谷歌,搜尋怎樣才能支援flv格式播放,網上的教程真是亂七八糟,都過時了,谷歌在Android4.x起就停止和Flash合作了,網上那些方法根本行不通,後來我只能用Android sdk做播放器了,於是就跟我姐夫說了 我只做了支援MP4、3GP格式的播放器了,到時要把廣告的格式改為MP4、3GP!!!後來也忘了什麼時候讓我知道vitamio的存在,後來想了想其實用vitamio做播放挺好的。現在大家有沒有覺得我又笨又坑啊!好吧,為了彌補我的不足,接下來,就讓超哥教大家如何打造自己的萬能播放器吧!!!
一、首先讓大家知道Android sdk原生的視訊控制元件與vitamio的區別:
android sdk對視訊的支援:
本地:支援3gp ,mp4,avi(支援播放出聲音)
網路:支援3gp ,mp4
vitamio對視訊的支援:
本地:支援所有格式
網路:支援所有格式
流媒體:支援mms,rtsp(官方說支援.但是執行的時候.直接crash),m3u8支援
(看到這裡,大家是不是覺得vitamio很強大很牛逼啊,確實如此!)
注:但vitamio是對個人免費,企業收費的,如果做一些簡單的支援MP4播放就行了那就用Android提供的sdk最簡單方便實惠,所以就看需求而定吧
二、如果要用Android 自動的視訊控制元件VideoView實現播放功能簡直是炒雞簡單不過了
layout佈局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <VideoView android:id="@+id/videoView1" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>
在activity中:
import android.app.Activity; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.view.WindowManager; import android.widget.VideoView; public class MainActivity extends Activity implements MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener { private VideoView videoView1; private String PATH_URL = "http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //螢幕常亮 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); //初始化 initVideoView(); } private void initVideoView() { //設定螢幕常亮 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); videoView1 = (VideoView) findViewById(R.id.videoView1); //網路地址 videoView1.setVideoURI(Uri.parse(PATH_URL)); //開始播放 videoView1.start(); //設定相關的監聽 videoView1.setOnPreparedListener(this); videoView1.setOnErrorListener(this); videoView1.setOnCompletionListener(this); } //播放錯誤 @Override public boolean onError(MediaPlayer mp, int what, int extra) { return false; } //播放準備 @Override public void onPrepared(MediaPlayer mp) { } //播放結束 @Override public void onCompletion(MediaPlayer mp) { } }
最後大家別忘了,要連網的話,千萬別漏了新增網路許可權:
<uses-permission android:name="android.permission.INTERNET" />
程式碼有註釋了,我就不多說了,是不是很簡單啊,沒有騙你吧,只不過真的有侷限性,只支援MP4、3GP格式!!!如果要做得漂亮點,可以自己去深入研究,我只介紹大家怎麼去用哈,自己去研究才能學到東西!!!
三、用vitamio打造萬能播放器,接下來就是重點啦!!!!!
先列出參考資料,想深入使用vitamio的就要進去多看看:
接下來帶大家整合vitamio sdk了,首先到vitamio官網下載vitamio最新的sdk,如下圖:下載完後解壓開啟後,如下圖InitActivity就是vitamio庫,vitamioLisActivity就是Demo,可以匯入檢視演示:
接下來就開始匯入vitamio庫了,如果是用eclipse開發的就直接匯入新增依賴包就行了,在此我就詳細說一下用Android studio的用法,因為谷歌已經宣佈停止用eclipse做Android開發了,加上Android studio越來越強大了。
新建module,選擇Android Library,重新命名你喜歡的就行,最後finish。如下圖:
接著點開剛才下載的vitamio包的InitActivity,如下圖:
把libs目錄下的so拷貝到剛新建的module/src/mian/jniLibs目錄下,把res、src對應拷貝到剛剛新建的module對應目錄下就行了,這裡要注意就是jniLibs目錄是要自己手動建立的。完成後如下圖:
然後就給所在專案的mudule新增依賴
compile project(':vitamio_library')
最後在AndroidManifest.xml配置
許可權:
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
註冊activity:
<activity android:name="io.vov.vitamio.activity.InitActivity" android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation" android:launchMode="singleTop" android:theme="@android:style/Theme.NoTitleBar" android:windowSoftInputMode="stateAlwaysHidden"/>
最後一步在程式中初始化引擎,引擎的檢查,要加入一行程式碼:
配置完成了,是不是也很簡單啊!
最後的最後就只剩開始加入程式碼看直播看電影去了唄!!!
layout佈局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="chaomap.zsml.com.chaovitamiovideo.MainActivity"> <io.vov.vitamio.widget.VideoView android:id="@+id/surface_view" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>
activity中:
import io.vov.vitamio.MediaPlayer; import io.vov.vitamio.Vitamio; import io.vov.vitamio.widget.MediaController; import io.vov.vitamio.widget.VideoView; public class MainActivity extends Activity implements MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener { private VideoView mVideoView; private MediaController mMediaController; private String PATH_URL1 = "http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"; private String PATH_URL2 = "http://gslb.miaopai.com/stream/3D~8BM-7CZqjZscVBEYr5g__.mp4"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // // if (!io.vov.vitamio.LibsChecker.checkVitamioLibs(this)) // return; Vitamio.isInitialized(getApplicationContext()); setContentView(R.layout.activity_main); mVideoView = (VideoView) findViewById(R.id.surface_view); //設定播放地址 mVideoView.setVideoPath(PATH_URL1); // mVideoView.setVideoURI(Uri.parse(PATH_URL1)); //例項化控制器 mMediaController = new MediaController(this); //繫結控制器 mVideoView.setMediaController(mMediaController); //控制器顯示9s後自動隱藏 mMediaController.show(9000); //設定播放畫質 高畫質 mVideoView.setVideoQuality(MediaPlayer.VIDEOQUALITY_HIGH); mVideoView.setVideoLayout(VideoView.VIDEO_LAYOUT_STRETCH,0); //取得焦點 mVideoView.requestFocus(); //設定相關的監聽 mVideoView.setOnPreparedListener(this); mVideoView.setOnErrorListener(this); mVideoView.setOnCompletionListener(this); } //播放準備 @Override public void onPrepared(MediaPlayer mp) { // optional need Vitamio 4.0 mp.setPlaybackSpeed(1.0f);//開始播放 // mVideoView.start(); } //播放錯誤 @Override public boolean onError(MediaPlayer mp, int what, int extra) { return false; } //播放結束 @Override public void onCompletion(MediaPlayer mp) { // mVideoView.start(); } }
有程式碼有註釋,其他的我就不多說了,直接截圖給你們看看: