B站最新最热漏勺,客户端0秒空气视频
我搁那看视频呢,然后UP主念结束语的时候看到下面推荐里面有 好 康 的,于是我就点进去看。
很简单对吧,但是这时候诞生了一个巧合。恰好在这个我点击的时间区间内,也就是这个视频播放完然后客户端的代码行为准备去切下一个视频的时候恰好被打断去我点击的另一个视频,然后引发播放器状态丢失问题。
客户端版本8.83.0(release-b23203277),也就是当前市场包最新版本。
管你听没听懂,看就完了:
在合集里面当前视频播放完然后即将切换下一个视频的时候点击推荐里的视频,会让跳过去的视频有音频没画面。甚至进度条都点不出来
那么这就简单了,有复现方法了就要可以去复现了……吗?错啦没那么简单,这玩意很吃操作的。因为需要恰好视频播放完又恰好播放控制相关代码即将切换然后又恰好在这个时候点击让跳转打断这个状态切换,我的天这buff叠满了。(我怎么把运气给浪费在这上面了)
向来严谨的我肯定想去尝试一把了,当然我一试,发现了新的问题:
那么可能有人会问了:啊嘿壳嘿壳,你这设备有root也有Lsposed,怎么确保不是这些影响了环境或者改变了一些行为呢?
那么好,我换一台设备给你测试。这台华为手机是没有root权限的,当然也没办法root。完全可信的环境这次总该公平了吧:
我测试所使用的两个设备分别是一加的PKX110(有root)和华为的CDY-AN00(没解bl)。关键是上报用的小程序里面设备信息只能填一个,总不能融合一下写个《华加手机》吧。所以最终俩设备我二选一写的(提交系统设计的时候就没考虑到有人会多设备测试吗)。
最终目前该问题已提交,啥时候修不一定哈哈
总结一下,这个bug大概率是由视频切换时的代码竞态条件所引发的状态预期行为不一致问题。
最小可复现步骤:
1.找一个视频比较多的合集
2.合集中间随便找个视频
3.把这个视频进度条拖到剩十秒左右结束的时候
4.盯着进度条,满了一瞬间感觉要跳下一个的时候点击下面的推荐视频(重点:要快!)
5.观察跳转过去的推荐视频的播放行为
6.按下返回键回去,观察合集视频的播放行为
(细节:你可以在返回之前决定跳转过去的视频是否暂停,有可能回到合集视频后的表现会不一样)
就这样,一个巧合引发的乌龙就这样梳理完了。问题很简单一般就是代码竞争,两边都跳。如果B站做好边界判断应该就没问题了,或者对这个巧合场景单独做优化和适配。
