android电视端播放器

android电视端播放器_第1张图片
android电视端播放器_第2张图片

最近,一直做tv端的播放器,有一些积累。而且github上的播放器项目都是手机端的,因此决定开源一个。代码写的不好,希望能让同行少踩坑。

项目有不完善的地方,但是会快速迭代。

遇到的难点:

问题:1.小窗切换至全屏,体验要流畅。

                      思路:使用SurfaceView + IJKPlayer,SurfaceView负责画面呈现,IJKPlayer负责播放控制。两个Activity使用同一个IJKPlayer就可以了。但是,由于有缓冲提示,所以要把缓冲完成的标志位封装到播放器身上。两个界面使用的是同一个播放器实例,这样缓冲进度条才正常。

问题2:SeekBar在手机上,监听快进开始和结束,使用的是Touch事件。Tv是Key事件。所以,onStartTrackingTouch和onStopTrackingTouch失效。

                      思路:封装了监听key事件开始拖动和结束拖动的方法。当时,可以存在不同盒子的适配问题。经测试,快进必须使用 拖动开始/拖动结束 这两个方法,否则,时间进度提示不准确。

问题三:右键点击一下,SeekBar快进的步长和MaxProgress,都需要根据视频长度动态计算。
                    思路:获取到视频的时长(单位是秒),作为SeekBar的MaxProgress。setKeyProgressIncrement这个方法可以设置SeekBar的步长。我是每隔一秒更新一次进度条,这样就可以实时更新进度了。

代码设计:

PlayerBean:对播放器及其状态的封装(一个Player要在两个类中使用)

SinglePlayerUtil:播放器实例的管理

BasicUiController:UI界面的管理,界面发生变化,支持扩展

FullScreenPlayer:播放器的创建、Surface的创建,播放器状态发生变化时,向BaseUIController发送消息来更新界面。

LiveConsole:控制面板的容器类,目前只有暂停/开始按钮。

MySeekBar:定制的Tv版进度条。


源码下载地址

你可能感兴趣的:(android电视端播放器)