Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

sr479/stb

Repository files navigation

文档以及示例源码不定期更新

收藏点star,订阅点watch

不再复杂的EPG页面开发

EPG运行于电视端,与我们所接触的前端(手机端、电脑端)有一定差异。体现为复杂的焦点管理,调试成本很高,播放器以及各个盒子之间兼容性问题。都在我们编码前无形增加难度。甚至于一天写好所有功能,要花两到三天去调试程序BUG,这几乎是无法接受的状态,恰恰也是不可避免的问题。

基于这样的初衷想过一些方案,比如利用主流框架优势(React、Vue)来简化开发难度,通过TypeScript 引入模块化方案。通过前端OOP合理组织代码。有些方案可行,盒子运行内核由各大厂商(华为、中兴、海信、烽火)等。盒子版本有2k、4k,由于这些客观原因,导致主流框架无法运行。

React 具有视图层复用,单项数据流等优势,对于EPG开发来说是一种福音。读了 React 设计思想 以及各个大神解析的 React 实现思路。完成了具备(状态机、虚拟DOM、组件化、子父组件)等概念的TV版React 框架且在各大IPTV专区完美运行,当然还有非常大改进空间。不过现有框架的优势也很明显,因此建议大家在了解后采用他,并提出自己宝贵改进建议。

起步

进阶

高阶

播放器

EPG开发记录

EPG页面运行于IPTV平台,其特殊性导致相关开发技术与人员是小众群体,总结了以下开发记录可有效避免一些常规问题

EPG开发日志(一):盒子与浏览器差异

开发体验优化

改进

  • 去掉 BOOTSTRAP 默认 CSS3 属性,不可控属性影响盒子性能
  • 启用本地node 服务 0 缓存,盒子指向本地。可实现不重启盒子便更新代码,但是必须在局域网内

BUG

  • 优化 API 缓存
  • 两分钟快进会回到快进期初位置在跳到快进点。流播放是正常
  • 播放器结束事件优化,采用接口的(考虑)可能存在兼容性。暂时不改
  • 阴影算法需要包含最近元素四个角的运算
  • componentWillUpdate 有时未正常触发;加载完毕后再去更新,render 在这之前执行了
  • loadFocus 位置调整
  • 无状态组件或有状态组件,在任何情况下必须返回父节点,否则导致异步更新无法加载情况
  • dom 渲染异常(部分组件之后所有未渲染,更新状态后某个组件未渲染)
  • React 渲染节点不允许节点元素存在 null 需要进行字符串转换
  • 无状态组件和有状态组件必须返回不变根容器,无状态组件建议使用普通函数直接返回 jsx 节点;灵活性更强

优化建立

  • React 组件 css + js 解决方案
  • 去掉所有默认样式,提升运行性能
  • 修复ts 与 less 图片加载路径
  • 状态和业务逻辑放到单独模块进行管理,渲染模块仅复杂渲染
  • 常用组件封装(单个移动+异步加载数据)

未实现

网络请求兼容 axios 方式

相关项目

  • anhui-戏曲(2017)
  • neiment-环球(2017)
  • yunnan-4k(2017)
  • anhui-猜灯谜(2018)
  • anhui-送祝福(2018)
  • neiment-天翼(2018.3)
  • anhui-聚合(2018.5)
  • yunnan-618活动(2018.6)
  • anhui-世界杯活动(2018.6)
  • shanxi-少儿(2018.7)
  • anhui-体育(2018.9)
  • guizhou-电竞(2018.11)
  • anhui-直播活动(2018.11)
  • guangxi-教育(2018.11)
  • guizhou-国学(2018.11)

About

机顶盒(TV端)EPG页面开发框架

Resources

License

Stars

Watchers

Forks

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /