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。
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库,否则是无法使用的
基本介绍就到这里,更多学习可以参见官方文档。
喜欢的朋友可以关注我!谢谢