基础封装视频播放器player,可以在ExoPlayer、MediaPlayer原生MediaPlayer可以自由切换内核;该播放器整体架构:播放器内核(自由切换) + 视频播放器 + 边播边缓存 + 高度定制播放器UI视图层。支持视频简单播放,列表播放,仿抖音滑动播放,自动切换播放,使用案例丰富,拓展性强。
|
6 years ago | |
---|---|---|
.idea | 6 years ago | |
YCVideoPlayerLib | 6 years ago | |
app | 6 years ago | |
gradle | 7 years ago | |
read | 6 years ago | |
.gitignore | 7 years ago | |
LICENSE | 7 years ago | |
README.md | 6 years ago | |
build.gradle | 7 years ago | |
gradle.properties | 7 years ago | |
gradlew | 7 years ago | |
gradlew.bat | 7 years ago | |
settings.gradle | 6 years ago |
```
compile 'cn.yc:YCVideoPlayerLib:2.6.1'
```
如果宽高比变形,则会有黑边
<org.yczbj.ycvideoplayerlib.VideoPlayer
android:id="@+id/video_player"
android:layout_width="match_parent"
android:layout_height="240dp"/>
```
//设置播放类型
// IjkPlayer or MediaPlayer
videoPlayer.setPlayerType(VideoPlayer.TYPE_NATIVE);
//网络视频地址
String videoUrl = DataUtil.getVideoListData().get(0).getVideoUrl();
//设置视频地址和请求头部
videoPlayer.setUp(videoUrl, null);
//创建视频控制器
VideoPlayerController controller = new VideoPlayerController(this);
controller.setTitle("自定义视频播放器可以播放视频拉");
//设置视频控制器
videoPlayer.setController(controller);
```
如果是在Activity中的话,建议设置下面这段代码
@Override
protected void onStop() {
super.onStop();
//从前台切到后台,当视频正在播放或者正在缓冲时,调用该方法暂停视频
VideoPlayerManager.instance().suspendVideoPlayer();
}
@Override
protected void onDestroy() {
super.onDestroy();
//销毁页面,释放,内部的播放器被释放掉,同时如果在全屏、小窗口模式下都会退出
VideoPlayerManager.instance().releaseVideoPlayer();
}
@Override
public void onBackPressed() {
//处理返回键逻辑;如果是全屏,则退出全屏;如果是小窗口,则退出小窗口
if (VideoPlayerManager.instance().onBackPressed()){
return;
}else {
//销毁页面
VideoPlayerManager.instance().releaseVideoPlayer();
}
super.onBackPressed();
}
@Override
protected void onRestart() {
super.onRestart();
//从后台切换到前台,当视频暂停时或者缓冲暂停时,调用该方法重新开启视频播放
VideoPlayerManager.instance().resumeVideoPlayer();
}
如果是在Fragment中的话,建议设置下面这段代码
//在宿主Activity中设置代码如下
@Override
protected void onStop() {
super.onStop();
VideoPlayerManager.instance().releaseVideoPlayer();
}
@Override
public void onBackPressed() {
if (VideoPlayerManager.instance().onBackPressed()) return;
super.onBackPressed();
}
//--------------------------------------------------
//在此Fragment中设置代码如下
@Override
public void onStop() {
super.onStop();
VideoPlayerManager.instance().releaseVideoPlayer();
}
这两个变量控制全屏后和退出全屏的屏幕方向
<activity android:name=".ui.test2.TestMyActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"/>
初期最简单功能
- 6.0.1.1 支持最简单视频播放,暂停,缓冲,全屏播放等基础功能。
- 6.0.1.2 支持滑动改变音量,改变声音大小的功能
6.0.1.3 还有其他基本功能
9.2 V1.0.1 更新于2017年11月18日
最简单的封装,并且阅读相关视频案例,借鉴了相关思路和复用了部分代码
测试环节
9.3 v1.1.0 更新于2018年1月15日
6.0.3.1 添加了设置视频播放权限的功能,用户可以自由设置权限,不过目前只是设置了用户是否登录,和登录用户是否有观看权限,因为公司需求是这样的,所以只有这两个。后期遇到其他需求再添加。逻辑已经在库中写好了,用户自己实现就可以呢。
6.0.3.2 关于权限肯定有话术内容,那么用户可以通过调用接口直接设置展示在播放器试看结束后的内容。十分方便,这块参考了优酷和爱奇艺视频
6.0.3.3 添加了用户多久不操作视频界面后,自动隐藏底部和头部布局视图。如果不设置,默认时间为5秒
6.0.3.4 添加了多种视频加载时候的加载效果,目前有两种,一种是转圈效果,一种是帧动画效果。当然你可以自己添加动画加载效果
9.4 v1.1.1 更新于2018年1月18日
6.0.4.1 修改了视频横向播放时,点击手机物理返回键,画面展示状态栏问题
6.0.4.2 修改了在list页面(recyclerView)的视频,当上拉加载更多时,加载十几次会导致崩溃问题
6.0.4.3 精简了布局文件,方便修改定制和阅读
6.0.4.4 修改了在网络不好或者飞行模式下,用户播放视频,应该是播放错误而不是一直转圈加载问题
6.0.4.5 完善了代码的注释,现在几乎所有的方法都有相关注释,方便阅读和理解。去掉了无用的代码
6.0.4.6 添加了暴露接口之用户登录和用户购买会员的接口,用户可以自己实现监听之后的操作或者跳转页面
6.0.4.7 添加了视频左上方的返回键监听,用户可以自己实现返回逻辑
6.0.4.8 添加了锁定屏幕方向的功能,还在测试中,有点问题
9.5 v2.4.5 更新于2018年4月21日
6.0.5.0 说明:全屏模式下,滑动屏幕左边改变亮度,滑动屏幕右边改变声音
6.0.5.1 触摸滑动事件中,优化了只有全屏的时候才能拖动位置、亮度、声音
6.0.5.2 优化了只有在播放,暂停,缓冲的时候才能改变亮度,声音,和拖动位置
6.0.5.3 滑动改变亮度,声音和拖动位置时,隐藏控制器中间播放位置变化图,亮度变化视图和音量变化视图
9.6 v2.4.6 更新于2018年8月2日
6.0.6.1 添加了竖屏下的全屏播放模式
6.0.6.2 解决了横屏下全屏播放模式的导航栏显示问题
9.7 v2.4.7 更新于2018年8月12日
6.0.7.1 添加了锁屏的功能,锁屏时,返回键不做任何处理,并且隐藏top和bottom面版控件
6.0.7.2 优化了全屏播放视频时,左右滑动可以设置快进和快退的功能
6.0.7.3 优化了播放视频中,没有网络,点击重试按钮提示用户检查网络是否异常吐司
6.0.7.4 注册一个网络变化监听广播,在网络变更时进行对应处理,从有网切换到没有网络时,切换播放状态
6.0.7.5 修改播放异常条件下,还有声音播放的问题
6.0.9 v2.5.0 更新与2018年8月20日
6.0.9.1 通过设置注解限制部分方法传入值类型,避免用户传入值导致意外情况
6.0.9.2 初步写了小窗口视频拖拽功能,在下一个版本上该功能
6.0.9.3 修改了正常窗口和全屏切换时,状态栏显示的问题
6.0.9.4 优化了播放和暂停的监听事件,将listener暴露给开发者,可以让开发者处理某些逻辑,比如暂停时弹出广告
6.1.0 v2.6.0 更新于2018年9月25日
6.1.0.1 优化了视频全屏播放时锁屏的功能
6.1.0.2 添加了视频在应用内小窗口拖动的功能
6.1.1 v2.7.0 更新与2019年2月14日
6.1.1.1 添加了注解限定符,其中包括资源类型注释,类型定义注释,值范围注释,@Nullable和@NonNull等等,增强代码的强壮性
6.1.1.2 当视频播放完成或者意外销毁,都需要解绑注册网络监听广播
6.1.1.3 当在播放视频页面,由前台切换到后台时,如果视频正在播放或者正在缓冲时,则暂停视频;当从后台切换到前台时,如果视频暂停时或者缓冲暂停,则重新开启视频播放
6.1.1.4 添加了缓冲视频和播放准备中加载视频的时候,显示网络速度的逻辑
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.