Android項目之android SDK視頻播放與vitamio視頻播放

尊重原創,轉載請注明:From zsml2016(http://blog.csdn.net/qq_29269233)Power byzsml2016侵權必究!

前言:
今天我想給大家分享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"
            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 Main2Activity 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);
        //初始化
        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 官網:http://www.vitamio.org
農民伯伯 博客:http://www.cnblogs.com/over140/category/409230.html(開發者之一,博客中有部分Vitamio中文API)

接下來帶大家集成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 implementsMediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener { 
        private VideoView mVideoView;
        private MediaController mMediaController; 
        private String PATH_URL1 = "http://clips.vorwaertsgmbh.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(); 
  }
}

有代碼有注釋,其他的我就不多說了,直接截圖給你們看看:



在此就結束了,希望大家多多指教,更多內容請關注我的CSDN博客:luoweichao.top

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,517評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,087評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,521評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,493評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,207評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,603評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,624評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,813評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,364評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,110評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,305評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,874評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,532評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,953評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,209評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,033評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,268評論 2 375

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,692評論 25 708
  • 太長了,還是轉載吧...今天在看博客的時候,無意中發現了@Trinea在GitHub上的一個項目Android開源...
    龐哈哈哈12138閱讀 20,242評論 3 283
  • 今天突然有一種豁然的開朗。前段時間對工作的現狀很是焦慮,一是對工作內容不喜歡,二是做起來沒成就感和成長,三是對工作...
    渡影寒塘閱讀 1,019評論 1 3
  • 灰蒙蒙的天空下了很大的雨,我跟瑤子坐在咖啡廳里,一邊靠窗攪勻著濃濃的咖啡,一邊看著外邊下不停的雨,空氣中滲著一股潮...
    瘦子abc閱讀 257評論 0 0
  • Javascript高級程序設計 最近想把Javascript再擼一篇,加深理解。所以在啃Javascript高級...
    麻不燒閱讀 398評論 0 3