一. 背景
在Android 开发中常常会涉及到视频播放,Android本身的VideoView以及MediaPlayer使用起来总是遇到这样那样的坑,并且Api对开发者也不是很友好,更不用说支持的视频格式了。后来陆续用过腾讯的播放库,百度的播放库,也研究过vitamio,ijkplayer,但都不是很满意,甚至有的库直接就4m以上。后来谷歌开源了新的播放器Exoplayer,这个播放器十分强大,但是用起来还是感觉好麻烦。最近又碰上视频播放了,本着拿来主义精神,到github搜了一圈发现了 JieCaoVideoPlayer,研究了一番决定就用它了,于是集成,按需求进行UI定制。等我都开发完了,有个小伙伴说试试播放本地视频,嗯,我随便找了个mp4的视频放到手机根目录,然后以 “file://”+视频路径 进行播放,尼玛,居然不能播放,瞬间心都凉了。一怒之下,自己动手,丰衣足食,于是 NaivorPlayer 就这样诞生了。
二. 简介
NaivorPlayer 是一个Android平台上面的视频播放库,基于Exoplayer进行封装,提供美观的操作界面和简单易用调用接口,其界面参考 JieCaoVideoPlayer,设计时方法和属性多采用protect,便于扩展,支持多种视频播放格式( MP4, M4A, FMP4, WebM, MKV, MP3, Ogg, WAV, MPEG-TS, MPEG-PS, FLV 和 ADTS (AAC),以及DASH,HLS)。
三. 使用
将 NaivorPlayer 加入项目
compile 'com.naivor:player:最新版本号'
添加view (宽高按需要)
<com.naivor.player.VideoPlayer android:id="@+id/videoPlayer" android:layout_width="match_parent" android:layout_height="240dp" />
设置播放的url
//设置播放源 videoPlayer.setUp(url,"视频名字");
播放
videoPlayer.start(); //调用后立即播放,也可以不用这步,点击播放按钮
其他
设置数据源后马上缓冲
videoPlayer.setAutoPrepare(true);
视频封面
//一般来说开启自动缓冲,就会把视频的第一帧作为封面,亦可以自己设置封面,有下面两种方式 1.videoPlayer.getPreviewView() //能拿到显示封面的ImageView,给它加载图片就是了 2.videoPlayer.setPreviewImage(bitmap); //将封面的Bitmap传入
开启小窗播放
videoPlayer.startWindowTiny(); //退出小窗调用 videoPlayer.backOriginWindow();
在List中播放
// 在onCreate 方法中 设置: 1. VideoPlayer.playVideoInList(listview,false); //这里的listview既可是ListView,也可以是RecyclerView(用LinearLayoutManager) 2. VideoPlayer.playVideoInList(listview,true); // 正在播放的视频滑出屏幕时自动开启小窗继续播放 .... //在onDestroy方法中 VideoPlayer.releaseAll();
可自定义小窗大小
VideoPlayer.setTinyWidth(tinyWidth); VideoPlayer.setTinyHeight(tinyHeight);
播放视频监听
videoPlayer.setPlayEventListener(playEventListener);
四. 效果
正常
全屏
- 横屏
- 竖屏
小窗
列表
- Listview
- RecyclerView
五. 结构
来一张截图吧,就不放UML了,大家有兴趣就自己看源码吧
六. 自定义UI
整理中,待续 …
七. 未来计划
播放视频显示字幕
多视频源切换
边下边播
集成弹幕
……
八. 最后
开发这个库的初衷是感觉Android缺乏一个美观,易用,支持格式多的视频播放库,如果大家对此项目感兴趣,欢迎贡献代码和意见
Github 地址:https://github.com/naivor/NaivorPlayer