快速使用Vitamio框架播放网络视频
2017-12-25 20:27
267 查看
简介
文章简介,把以前写过的东西拿来复习分享一下,由于Android自带的VideoView等控件支持的视频播放格式较少,所以使用到Vitamio框架进行快速的搭建一个能播放更多格式的视频播放功能。需要用到
Vitamio框架:https://github.com/yixia/VitamioBundle
Android Studio:http://www.android-studio.org/
Android SDK等一系列的开发环境,推荐使用API Level 18以上,模拟器CPU选择ARM架构的,选择Intel架构的会出现崩毁现象。
准备工作
下载Vitamio下载完成后只需要解压出Vitamio这个文件夹
然后打开Android Studio 新建项目,在File->New->Import Module
选择对应的文件目录,根据提示进行相应操作后,在Project Structure 中能看到Vitamio这个模块说明导入成功了。
布局编写
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" android:orientation="vertical" > <!-- 使用Vitamio中的不局将Vitamio框架的VideoView包裹--> <io.vov.vitamio.widget.CenterLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <io.vov.vitamio.widget.VideoView android:id="@+id/buffer" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerHorizontal="true" android:layout_centerVertical="true" /> </io.vov.vitamio.widget.CenterLayout> <!--设置一些用户响应的控件 --> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:orientation="horizontal" > <!-- 加载视频师显示出来 --> <ProgressBar android:id="@+id/probar" style="?android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!-- 显示当前下载网速 --> <TextView android:id="@+id/download_rate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="" /> <!-- 显示当前加载进度 --> <TextView android:id="@+id/load_rate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="" /> </LinearLayout> </RelativeLayout>
Activity文件
下面开始写代码了package com.TJApp.handchina.Activity; import com.TJApp.handchina.R; import com.TJApp.handchina.R.id; import com.TJApp.handchina.R.layout; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import io.vov.vitamio.LibsChecker; import io.vov.vitamio.MediaPlayer; import io.vov.vitamio.Vitamio; import io.vov.vitamio.widget.MediaController; import io.vov.vitamio.widget.VideoView; /** * 播放器集成 * * @author TianJun * */ public class MyVideoPlay extends Activity implements MediaPlayer.OnBufferingUpdateListener, MediaPlayer.OnInfoListener { private String path = "" ; // private Uri uri = null; private ProgressBar pb; private TextView downloadRateView, loadRateView; private VideoView mVideoView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //检查Vitamio的库是否正常 c182 if (!LibsChecker.checkVitamioLibs(this)) { return; } //初始化框架 Vitamio.isInitialized(getApplicationContext()); setContentView(layout.videoplayer); //获取intent,并获取传递进来的URL参数 Intent intent = getIntent(); path = intent.getStringExtra("VideoUrl"); //初始化绑定相应控件 pb = (ProgressBar) findViewById(id.probar); mVideoView = (VideoView) findViewById(id.buffer); downloadRateView = (TextView) findViewById(R.id.download_rate); loadRateView = (TextView) findViewById(R.id.load_rate); //判断UR是否为空 if (path == "") { //告诉用户需要设置媒体文件的URL地址路径 Toast.makeText(MyVideoPlay.this, "请输入媒体文件URL地址", Toast.LENGTH_LONG).show(); return; } else { //设置播放地址 mVideoView.setVideoPath(path); //设置视频控制器,当然这个可以自定义控制器,我这里使用自带想控制器 mVideoView.setMediaController(new MediaController(this)); //获取焦点 mVideoView.requestFocus(); //设置状态信息监听 mVideoView.setOnInfoListener(this); //设置数据更新监听 mVideoView.setOnBufferingUpdateListener(this); //进行异步的准备 mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mediaPlayer) { //播放速率的调节,需要Vitamio 4.0 以上 mediaPlayer.setPlaybackSpeed(1.0f); } }); } } /** * 数据更新监听的回调函数 * @param mp the MediaPlayer the update pertains to * @param percent the percentage (0-100) of the buffer that has been filled thus */ @Override public void onBufferingUpdate(MediaPlayer mp, int percent) { // Log.i("onBufferingUpdate",percent+""); loadRateView.setText(percent + "%"); } /** * 视频状态更新监听的回调函数 * @param mp the MediaPlayer the info pertains to. * @param what the type of info or warning. * <ul> * <li>{@link #MEDIA_INFO_VIDEO_TRACK_LAGGING} * <li>{@link #MEDIA_INFO_BUFFERING_START} 缓存开始 * <li>{@link #MEDIA_INFO_BUFFERING_END} 缓存结束 * <li>{@link #MEDIA_INFO_NOT_SEEKABLE} * <li>{@link #MEDIA_INFO_DOWNLOAD_RATE_CHANGED} 缓存率改变 * </ul> * @param extra an extra code, specific to the info. Typically implementation * dependant. * @return */ @Override public boolean onInfo(MediaPlayer mp, int what, int extra) { switch (what) { case MediaPlayer.MEDIA_INFO_BUFFERING_START: //缓存开始,判断是否在播放,如果在,那就暂停播放,出现等待的响应提示 if (mVideoView.isPlaying()) { mVideoView.pause(); pb.setVisibility(View.VISIBLE); downloadRateView.setText(""); loadRateView.setText(""); downloadRateView.setVisibility(View.VISIBLE); loadRateView.setVisibility(View.VISIBLE); } break; case MediaPlayer.MEDIA_INFO_BUFFERING_END: //缓存结束,视频开始播放,等待的响应相关控件消失 mVideoView.start(); pb.setVisibility(View.GONE); downloadRateView.setVisibility(View.GONE); loadRateView.setVisibility(View.GONE); break; case MediaPlayer.MEDIA_INFO_DOWNLOAD_RATE_CHANGED: //下载速率的显示 downloadRateView.setText("" + extra + "kb/s" + " "); break; } return false; } /** * Activity 失去焦点 */ @Override protected void onPause() { super.onPause(); mVideoView.pause();//暂停 } /** * Activity 获得焦点 */ @Override protected void onResume() { super.onResume(); mVideoView.start();//开始 } /** * Activity 停止 * 停止摧毁后一定要判断是否有初始化,如果初始化后需要关闭释放Vitamio播放器 * 不然会出现应用崩溃 */ @Override protected void onStop() { super.onStop(); //判断是否初始化 if (LibsChecker.checkVitamioLibs(this)) { //VideoView停止关闭 mVideoView.stopPlayback(); } } }
大功告成!~
对了,manifest的配置文件不要忘了哦。
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
相关文章推荐
- Android视频播放框架Vitamio集成及使用MediaPlayer+SurfaceView、VideoView+MediaController实现播放网络视频
- VideoView (Vitamioplayer使用)播放网络视频
- 播放视频的框架Vitamio的使用问题
- 使用Vitamio打造自己的Android万能播放器(12)—— 播放网络视频缓冲处理
- vitamio视频播放框架使用
- 使用Vitamio打造自己的Android万能播放器(12)—— 播放网络视频缓冲处理
- 使用Vitamio打造自己的Android万能播放器(12)—— 播放网络视频缓冲处理
- 使用Vitamio打造自己的Android万能播放器(12)—— 播放网络视频缓冲处理
- 使用 Kotlin 读取本地视频并使用Vitamio框架编写万能播放器进行播放(二)
- 使用 Kotlin 读取本地视频并使用Vitamio框架编写万能播放器进行播放(一)
- 视频框架 Vitamio 使用教程+部分心得 (四) 滑动控制声音和亮度+android 4.4.X 以上时全屏播放
- 播放视频的框架Vitamio的使用问题
- 使用Vitamio打造自己的Android万能播放器(12)—— 播放网络视频缓冲处理
- Vitamio(中文:维他蜜)使用第三方框架实现视频播放
- 视频播放 Vitamio框架的使用(一)
- 播放视频的框架Vitamio的使用问题
- 使用Vitamio打造自己的Android万能播放器(12)—— 播放网络视频缓冲处理
- 视频播放框架 - Vitamio的使用
- 播放视频的框架Vitamio的使用问题
- 播放视频的框架Vitamio的使用步骤