1. 程式人生 > >Android視訊媒體相關,VideoView和開源框架vitamio

Android視訊媒體相關,VideoView和開源框架vitamio

雖然Android已經內建了VideoView元件和MediaPlayer類來支援開發視訊播放器,但支援格式、效能等各方面都十分有限,但是Vitamio的確強大到沒朋友!

Vitamio 是一款 Android 與 iOS 平臺上的全能多媒體開發框架,全面支援硬體解碼與 GPU 渲染。

Vitamio 功能強大,能夠流暢播放720P甚至1080P高清MKV,FLV,MP4,MOV,TS,RMVB等常見格式的視訊,還可以在 Android 與 iOS 上跨平臺支援 MMS, RTSP, RTMP, HLS(m3u8) 等常見的多種視訊流媒體協議,包括點播與直播。

接下來就從sdk原生的VideoView開始,過度到vitamio框架。

1、原生的VideoView

android sdk對音訊視訊的支援

  • 音訊:mp3 wma
  • 視訊:3gp mp4

Demo:

佈局:

<VideoView
        android:id="@+id/vv"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

活動程式碼:
package com.example.videoviewdemo;

import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.net.Uri;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.Toast;
import android.widget.VideoView;

public class MainActivity extends Activity implements OnPreparedListener, OnErrorListener, OnCompletionListener {

	private VideoView mVv;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//1.例項化videoView
		mVv = (VideoView) findViewById(R.id.vv);
		//設定相關的監聽
		mVv.setOnPreparedListener(this);
		mVv.setOnErrorListener(this);
		mVv.setOnCompletionListener(this);
		/**測試支援格式
		//1.flv
		//2.3gp 、.mp4     可以
		//3.avi    有聲音無影象
		//4.rmvb
		//5.mkv
		//storage/emulated/0/Download/5.mkv
		 */
		//2.設定視訊的地址
		//		mVv.setVideoPath("/storage/emulated/0/Download/video_test.mp4");
		mVv.setVideoPath("http://192.168.1.100:8080/1.mp4");
//		mVv.setVideoPath("http://192.168.1.100:8080/2.3gp");
		//		mVv.setVideoURI(Uri.parse("http://192.168.1.100:8080/2.3gp"));

		//3.設定控制條
		mVv.setMediaController(new MediaController(this));
		//4.開始播放
		mVv.start();

	}

	@Override
	public void onCompletion(MediaPlayer mp) {
		// TODO
		Toast.makeText(getApplicationContext(), "播放完了", 0).show();

	}

	@Override
	public boolean onError(MediaPlayer mp, int what, int extra) {
		Toast.makeText(getApplicationContext(), "資源有問題", 0).show();
		return false;
	}

	@Override
	public void onPrepared(MediaPlayer mp) {
		Toast.makeText(getApplicationContext(), "準備好了", 0).show();
	}

}

播放網路視訊,記得加上許可權:<uses-permission android:name="android.permission.INTERNET" />

執行:



可以看到非常清晰的播放。但是美中不足的是,它支援的格式有限。而接下來介紹的vitamio,解決了這個問題,當然,也更強大。

2、vitamio介紹

vitamio執行demo總結

  • 本地:支援所有格式
  • 網路:支援所有格式
  • 流媒體:支援mms rtsp(官方說支援.但是執行的時候.直接crash) m3u8支援
Demo:

首先看看它是怎麼用,再演示完整的Demo。

ViewView的整合過程:

  1. 下載lib包.demo:https://github.com/yixia/VitamioBundle
  2. 新建工程,引入lib包
  3. 是否修改androidmanifest.xml

    1. 許可權

      <uses-permission android:name="android.permission.INTERNET" />
      
    2. 新增activity

      <!-- vitamio add -->
      <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" />
      
  4. 寫程式碼

    //使用vitamio需要初始化引擎,引擎的檢查
    /**---------------需要注意 begin---------------**/
    if (!LibsChecker.checkVitamioLibs(this))
        return;
    /**---------------需要注意 end---------------**/
    
    mVitamio_vv = (VideoView) findViewById(R.id.vitamio_vv);
    /**---------------設定監聽---------------**/
    mVitamio_vv.setOnPreparedListener(this);
    mVitamio_vv.setOnErrorListener(this);
    mVitamio_vv.setOnCompletionListener(this);
    //設定路徑
    mVitamio_vv.setVideoPath("storage/emulated/0/Download/5.mkv");
    //設定控制條
    mVitamio_vv.setMediaController(new MediaController(this));
    //開始播放
    mVitamio_vv.start();
完整Demo:

佈局:

<io.vov.vitamio.widget.VideoView
        android:id="@+id/vitamio_vv"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

主活動程式碼:
package com.example.vitamiodemo59;

import io.vov.vitamio.LibsChecker;
import io.vov.vitamio.MediaPlayer;
import io.vov.vitamio.MediaPlayer.OnCompletionListener;
import io.vov.vitamio.MediaPlayer.OnErrorListener;
import io.vov.vitamio.MediaPlayer.OnPreparedListener;
import io.vov.vitamio.widget.MediaController;
import io.vov.vitamio.widget.VideoView;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends Activity implements OnPreparedListener, OnErrorListener, OnCompletionListener {

	private VideoView mVitamio_vv;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		//使用vitamio需要初始化引擎,引擎的檢查
		/**---------------需要注意 begin---------------**/
		if (!LibsChecker.checkVitamioLibs(this))
			return;
		/**---------------需要注意 end---------------**/

		mVitamio_vv = (VideoView) findViewById(R.id.vitamio_vv);
		/**---------------設定監聽---------------**/
		mVitamio_vv.setOnPreparedListener(this);
		mVitamio_vv.setOnErrorListener(this);
		mVitamio_vv.setOnCompletionListener(this);
		//設定路徑
		//本地視訊
		//網路視訊
		//流媒體
		mVitamio_vv.setVideoPath("storage/emulated/0/Download/5.mkv");
		//設定控制條
		mVitamio_vv.setMediaController(new MediaController(this));
		//開始播放
		mVitamio_vv.start();
	}

	@Override
	public void onCompletion(MediaPlayer mp) {
		// TODO
		Toast.makeText(getApplicationContext(), "播放完了", 0).show();
	}

	@Override
	public boolean onError(MediaPlayer mp, int what, int extra) {
		Toast.makeText(getApplicationContext(), "資源有問題", 0).show();
		// TODO
		return false;
	}

	@Override
	public void onPrepared(MediaPlayer mp) {
		Toast.makeText(getApplicationContext(), "準備好了", 0).show();
		// TODO

	}

}
執行效果如下:

需要注意引入lib庫,否則是無法使用的

基本介紹就到這裡,更多學習可以參見官方文件。

喜歡的朋友可以關注我!謝謝