Android視訊媒體相關,VideoView和開源框架vitamio
阿新 • • 發佈:2019-02-15
雖然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。
ViewView的整合過程:
-
下載lib包.demo:
https://github.com/yixia/VitamioBundle
- 新建工程,引入lib包
-
是否修改androidmanifest.xml
-
許可權
<uses-permission android:name="android.permission.INTERNET" />
-
新增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" />
-
-
寫程式碼
//使用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();
佈局:
<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庫,否則是無法使用的
基本介紹就到這裡,更多學習可以參見官方文件。
喜歡的朋友可以關注我!謝謝