[关闭]
@JeromeLiee 2019-12-17T07:49:49.000000Z 字数 3209 阅读 400

直播中心V6.3

直播中心 V6.3



1. 数据刷新逻辑

直播中心由于存在赛程表,需要做到动态实时刷新,保证赛程表展示最新的比赛状态。

在该版本采取了固定刷新+倒计时刷新,保证了实时展示最新的比赛状态,但由于同一时间多个设备请求赛程表接口会造成后台压力,故采取了随机延迟的请求策略,防止高并发造成服务器压力过大。

1.1 刷新时间

刷新时间主要有两种,一种是固定刷新,另一种根据算法得出最短刷新时间,然后根据此时间进行倒计时。

1.1.1 固定刷新

默认固定为5min,但在开发测试阶段,可通过如下方式进行自定义设置固定刷新时间,方便调试。

自定义设置固定刷新间隔(开发与测试使用):

在设备的 /sdcard/pptv_atv/ 路径下创建 livecenter.properties 文件,其文件内容格式为:
refreshTime=30

上面的内容表示直播中心的固定刷新时间为30秒,可以任意设置其值,必须大于0才生效。

1.1.2 倒计时刷新

主要是获取最近赛事一个最短的时间,该时间可以是要结束的倒计时,或者是要开始的倒计时,字段解释如下:

默认的 refreshTime 为12小时,计算 refreshTime 具体逻辑如下:

  1. 遇到已结束的节目,跳过
  2. 遇到未开始的节目,则计算该节目的倒计时 refreshTime = startTime - current,并与之前的倒计时refreshTime进行比较,返回较小者的值
  3. 遇到已开始的节目,判断其是否为对抗赛:
    • 是对抗赛,判断其比赛状态是赛前分析还是直播中:
      • 赛前分析,则refreshTime = min(之前的倒计时,matchStartTime - currentTime)
      • 直播中,则refreshTime = min(之前的倒计时,endTime - currentTime)
    • 不是对抗赛,则refreshTime = min(之前的倒计时,endTime - currentTime)

其中逻辑3会一直循环遍历,直到遇到逻辑2。

1.2 用户触发刷新

当用户通过按遥控器进入直播中心页面tab,包括从直播中心页面进入其它页面再返回,则会立刻请求赛程表接口,并且重新设置1.1小节中的刷新时间。

1.3 随机延迟

上文说过,由于同一时间多个设备请求赛程表接口会造成后台服务器压力,故采取了随机延迟的请求策略。在固定刷新或倒计时刷新结束执行时,会随机10~120秒去执行赛程表网络请求,所以会存在一定的时间误差,这是暂时无法避免的。

2. 缓存策略

由于直播中心在首页展示,当出现网络异常情况,需要展示缓存数据,故需要采取一定的数据缓存策略。缓存的数据包括赛程表和按左键弹出的赛事筛选列表,主要分为内存缓存和本地磁盘缓存。

2.1 内存缓存

当执行网络请求时,获取数据成功后会将数据缓存至内存中,并且每次请求成功后会更新该缓存。当接口返回数据异常或网络异常时,则判断内存缓存中是否有数据,有则返回,否则进一步判断本地磁盘缓存。

2.2 本地磁盘缓存

当执行网络请求时,获取数据成功后先缓存至内存中,同时会缓存至本地磁盘缓存中,同样每次请求成功会更新本次磁盘缓存。当接口返回数据异常或网络异常,首先会判断内存缓存,当内存缓存没有数据,则判断本地磁盘缓存是否存在数据,是则返回,否则返回空的数据集合,页面UI展示数据异常弹窗提示。

3. 赛程表展示刷新规则

当获取到数据后,就需要刷新展示该数据。在展示数据时需要进行一系列的操作,例如校正数据,对数据格式进行转换等处理,以及刷新一条还是全部都刷新等逻辑判断。

3.1 校正数据

通过调用实时刷新接口,获取昨天和今天所有对抗赛最新的比分和比赛状态,处理完之后将数据展示到前端UI页面。

3.2 最佳展示位置

从其它tab切换到直播中心后,会默认展示最佳展示位置的赛事节目,其最佳展示位置的规则为:

3.3 赛事页面UI刷新逻辑

主要分为强制全量刷新和部分刷新两种。

3.3.1 强制全量刷新

当重新获取赛程表信息,如果满足强制刷新逻辑的触发时机,则执行强制刷新,并计算最佳展示位置,焦点被重新落焦在最佳展示位置的比赛上,同时还会请求详情页接口。强制刷新的触发时机如下:

3.3.2 部分刷新

当不满足强制全量刷新的触发时机,则会进行部分刷新逻辑,只会刷新其比分、状态等,落焦item位置不变。

4. 播放

播放行为主要分为三种,一是进入页面默认播放,二是用户点击某赛事或点播以及循环播放,三是节目状态发生变化开始播放或结束播放。

4.1 默认播放

进入直播中心后默认播放最佳展示位置的赛事节目,如果该节目已开始,则播放该赛事;如果已结束或未开始,则判断有没有点播节目,有则播放,无则显示背景图。

4.2 点击播放及循环播放

4.3 节目状态变化播放

当前展示的赛事节目状态发生改变时,则会根据其状态变化进行播放行为的改变:

4.4 播放错误码

用户进行点击播放操作时,由于数据异常,会导致无法播放,会弹出toast错误提示,提示内容为 暂时不能播放哦(错误码),具体错误码含义如下:

5. 新旧直播中心切换

新旧直播中心目前共存,默认显示新版直播中心,切换配置在赛程表文案配置接口里,将字段 livecenter_ui 的值设为 old ,然后重启应用,则会展示旧的直播中心,配置其它值则展示新的。

6. 直播中心相关接口

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注