目前的EPG分为两种:
1.浏览器在盒子的原始环境中
2.在android环境,使用app承载能力,
使用原生app实现
使用webView加载网页作为载体
对于相同配置的盒子,性能和适配的差异
性能及效果:android app原生>android app webView>=原生浏览器
兼容性难度:原生浏览器>android app webView>android app原生
适配细节点:
原生浏览器:在大环境下使用es5.在之前的版本中,有些方法不存在较旧的盒子。对于更新的盒子es5.更好的支持
android app webView:盒子的webView本地浏览器是谷歌核心的早期版本,但支持性更好,一般的新特性可以支持
android app原生:android大部分系统版本都停留在4.也有个别地区探索94版本.0版本,在一般版本android开发区别不大
关键点:
| 功能 | 原生浏览器 | android原生 | android webView | 备注 |
| launcher和EPG交互 | 在地址栏中携带参数 | intent中携带信息 | 通过原生的intent传递给webView | 必须返回信息 |
| 获取盒子信息 | 根据EPG规范获取,由Authentication关键字获取 | 没有明确规范各地区的自定义 | 依赖原生app | |
| 播放器 | 根据EPG规范的MediaPlayer | 自定义开发 | 依赖原生app,在层级在webView下 | 建议在webView对接模式h5的接口于EPG规范相同 |
| 跳转到外部地址 | 在地址中携带信息 | app之间的跳转 | 依赖原生app | 包括订购;一般有相应的文件 |
播放器:
根据EPG规范的MediaPlayer适配小技巧
开始播放失败:尝试执行playFromStart和playByTime方法二选一或在playFromStart之前先stop
断点播放失败:只执行playByTime或在playFromStart之后加200ms延迟再执行playByTime
无法触发开始播放:启动一个setInterval,如果每秒获得当前进度,>0意味着它开始播放,并与原始回调一起使用
无法触发结束播放:启动一个setInterval,如果每秒获得当前进度,=总时间表示播放结束,与原生结束回调一起使用
获得当前进度失败:启动一个setInterval,每秒处于非暂停状态 1.这里会有进度误差,但可以忽略