1. 程式人生 > >Android專案之android SDK視訊播放與vitamio視訊播放

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();
}



}


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