尊重原創,轉載請注明: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