利用Vitamio做自己的视频播放器
来源:互联网 发布:英雄联盟软件 编辑:程序博客网 时间:2024/06/07 09:21
软硬件环境
- Macbook Pro MGX 72
- 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视频文件
这个的做法跟http://blog.csdn.net/djstavav/article/details/47726675里的音乐扫描是一样的
播放器的代码
这时候该轮到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/djstava/DJMediaPlayer
参考文献
https://vitamio.org/
- 利用Vitamio做自己的视频播放器
- 用vitamio打造自己的视频播放器
- Android视频框架 Vitamio 打造自己的万能播放器
- Android视频框架 Vitamio 打造自己的万能播放器
- Android视频框架 Vitamio 打造自己的万能播放器
- Android视频框架 Vitamio 打造自己的万能播放器
- Android视频框架 Vitamio 打造自己的万能播放器
- vitamio视频播放器
- Vitamio视频播放器
- 集成Vitamio的视频播放器
- android视频播放器Vitamio的使用
- Vitamio 视频播放器的教程
- Vitamio 打造自己的万能播放器
- Android--使用开源vitamio做万能视频播放器
- Android--使用开源vitamio做万能视频播放器
- 利用Vitamio开发视频播放器(一)
- 十六,iOS使用Vitamio做视频播放
- 视频播放的vitamio框架
- hdu 5366 The mook jong
- PHP 性能分析与实验——性能的宏观分析
- c#值类型与引用类型
- android动态加载控件(LinearLayout)并获取动态添加的EditText里的值
- selenium(webdriver)学习笔记3--InternetExplorerDriver
- 利用Vitamio做自己的视频播放器
- 落单的数
- Android小方法——在Android Studio中进行单元测试
- 1596 find the safest road【floyd】
- 首期百度“金熊掌尖子班”毕业:21个团队获10亿融资
- Chapter5 : View controller & KVC - The Big Nerd Ranch Guide 读书笔记
- python中的有序字典OrderedDict
- category和protocol 第五天稍晚了一些。
- 关于double类型数字相加位数发生变化的问题