目前的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.4版本,也有个别地区探索9.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,这里会有进度误差,但是可以忽略
这里推荐一下EPG前端框架:View-App
官方地址:view-api
Demo地址:view-app