Koolearn视频播发器 框架分享
大约 2 分钟
Koolearn视频播发器 框架分享
本文简要介绍一下播放器UI库,以便相关项目成员对播放器UI库有一个整体的认识
一、公司安卓播放器架构组成
分四层:业务层、播放器UI层、播放器层、底层
- 底层为视频流编解码等,由视频组开发
- 播放器层属于视频组对外提供的播放器
- ui库作为单独的库对其它安卓项目提供;
- 业务层各个项目组自己实现
二、播放器UI库
1. 类图
2. 集成方法
KoolearnMediaUI
- 在onCreate()中执行 2、3步
- new KoolearnMediaUi() 创建实例 并 实现相关接口参数
- 设置Fragment或者Activity的布局 setContentView(getContentView())
- fragment actvity的各个生命周期中调用:onStart onResume onPause onStop onDestory onConfiguratonChanged onKeyDown
3. ui布局结构
播放器布局复杂且交互较多,ui布局合理性直接影响到播放器的代码结构及可读性,所以比较重要
UI布局分四块:
- 底部:进度条 播放控制区
- 顶部:返回按钮 视频名称等
- 左边:锁屏功能
- 右边:菜单、设置功能
- 中间:左半区 屏幕亮度、右半区 声音控制、中间进度拖拽及提示框 加载框等
- 底部弹出:评价、提问等半屏弹出界面
整体布局思路:KoolearnMediaUI 通过xml布局 读取 ControllerView(手势检测布局,对外提供回调接口) 然后根据横竖屏情况 动态添加 FullScreenController或者PortraintScreenController,FullScreenController 和PortraintScreenController以组件化的方式集成上下左右布局,其中公共控件又可以单独实现,以进一步进行解耦,具体在此不做过多阐述。 优势:进行的合理解耦,可以避免在一个类中做各种布局组件和手势等逻辑的堆砌。部分功能ui和逻辑解耦,比如StatusBar为顶部布局,如果其中的倍速按钮需要移动到底部MediaController布局中,那么直接移动控件即可,点击事件及相应逻辑是在ScreenController中,不需要额外处理
三、未来优化方向:
- 对下与播放器本身分离,如有必要可以替换成其它播放器:原生的mediaplayer、vitamio等
- 对上与公司业务分离
- 站点 倍速等功能可以选择性的集成
- 设置 倍速等功能按钮可以便携的移动到播放器的上下左右等位置
- 界面中可以弹出半屏框,而不是构造一个透明activity
- 广告支持等
开发中注意点:
- 后台播放功能
- 生命周期关联问题
- 网络切换免流等引起的业务问题
- 屏幕旋转、home键返回、来电、锁屏等各种情况的处理