软硬件环境
- Mac Pro
- Android Studio 1.3.1
- 酷比魔方7寸平板
前言
Vitamio
是一款Android
和iOS
平台上的多媒体开发框架,支持硬件解码与GPU
渲染。它的应用很广,很多知名的APP
都在使用。Vitamio
目前分为标准版和至尊版,标准免费版本仅限个人开发者使用,非个人移动应用均需要购买使用授权。
准备工作
到Vitamio
的Github
地址 https://github.com/yixia/VitamioBundle 下载SDK
在Android Studio
中新建一个工程名为DJMediaPlayer
,再把下载下来的vitamioBundle
目录底下的vitamio
文件夹以模块的形式导入到新建的工程当中,接着将vitamio
模块下的build.gradle
文件中的compileSdkVersion
、buildToolsVersion
、minSdkVersion
和targetSdkVersion
都修改成跟app
模块下的build.gradle
相应字段一样的数据。
最后修改下app
模块下build.gradle
,增加依赖语句
开始编码
布局
总共分2块,第一是视频列表布局,这里设计成一个listview
,另一个是视频播放时的布局,这里用到了vitamio
里的io.vov.vitamio.widget.VideoView
控件,直接用来播放视频,另外通过手指滑动来控制音量大小则用的是FrameLayout
。
扫描SD视频文件
这个的做法跟 自己动手做android音乐播放器一文 里的音乐扫描是一样的
播放器的代码
这时候该轮到vitamio
上场了,直接用它提供的VideoView
和MediaController
videoView = (VideoView)findViewById(R.id.surface_view);
mediaController = new MediaController(this);
//设置成撑满全屏
videoView.setVideoLayout(VideoView.VIDEO_LAYOUT_STRETCH,0);
videoView.setMediaController(mediaController);
videoView.requestFocus();
videoView.setVideoPath(movieUrl);
除此之外,VideoView
的setOnPreparedListener
、setOnCompletionListener
、setOnErrorListener
都需要实现一下。
播放器上的手势控制
这里只实现了3个手势。分别对应手势类GestureDetector
的三个方法,即onDoubleTap
、onScroll
和onFling
。
第1个手势是双击屏幕,实现播放/暂停功能。这个要重写onDoubleTap
方法
if (videoView.isPlaying()) {
videoView.pause();
} else {
videoView.start();
}
第2个手势是水平滑动屏幕,实现快进/快退功能。这个要重写onFling
方法
currentPosition = videoView.getCurrentPosition();
/*向左滑*/
if (e1.getX() - e2.getX() > 120) {
if (currentPosition < 10000) {
currentPosition = 0;
videoView.seekTo(currentPosition);
} else {
videoView.seekTo(currentPosition - 10000);
}
} else if (e2.getX() - e1.getX() > 120) {
/*向右滑*/
if (currentPosition + 10000 > duration) {
currentPosition = duration;
videoView.seekTo(currentPosition);
} else {
videoView.seekTo(currentPosition + 10000);
}
}
第3个手势是上下滑动屏幕,实现音量的升降功能。这个要重写onScroll
方法
//上下滑动
if (Math.abs(distanceY) / Math.abs(distanceX) > 3) {
float mOldY = e1.getY();
int y = (int) e2.getRawY();
Display disp = getWindowManager().getDefaultDisplay();
int windowHeight = disp.getHeight();
onVolumeSlide((mOldY - y) / windowHeight);
}
备注
发现在工程清单文件中增加SD卡的权限时
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Android Studio
在自动补全时,android.permission
这些字符全是大写,导致程序跑起来达不到自己想要的效果,这里要注意,要写成小写。
源码下载
Github
地址 https://github.com/xugaoxiang/DJMediaPlayer