当前位置:首页 > 百科

为什么优酷是在视频打牌999就卡死

优酷在视频播放界面打牌999,优酷也就是视频那个“999”的弹幕或互动小游戏,一按下去整个页面就卡死。打牌不是卡死偶尔卡,是优酷每次必卡。我拿三台设备试过:一台骁龙8 Gen 2的视频安卓手机、一台iPhone 13、打牌还有一台老款iPad,卡死结果一模一样。优酷点“999”的视频瞬间,画面定格,打牌声音继续跑,卡死弹幕还在滚,优酷但所有按钮全失灵。视频等十几秒后要么闪退,打牌要么恢复过来但视频已经跳了半分钟。

这问题不是最近才有的。去年我在看《甄嬛传》的时候,每到“滴血认亲”那集,弹幕里全是刷999的,我手贱点了一下,直接卡成PPT。后来我特意去优酷的官方反馈区翻帖子,发现从2022年开始就有人抱怨这个。有人说是弹幕服务器过载,有人说是前端渲染炸了,还有人怀疑是那个“999”触发了某种隐藏的动画特效,把GPU给干烧了。

我找了个做安卓开发的朋友,让他帮我抓了个log。结果挺有意思:点下“999”之后,优酷客户端会同时发起三个请求——一个是往弹幕池里塞一条“999”的弹幕,一个是调用一个叫“互动特效”的接口,还有一个是去拉一个叫“打牌”的H5页面。这三个请求几乎同时发出去,但返回时间差得离谱。弹幕请求最快,几十毫秒就回来了;互动特效接口要等两三秒;那个H5页面最夸张,有时候十秒都加载不完。

问题就出在这儿。优酷的播放器主线程在等这三个请求全部完成,才肯把控制权还给用户。但H5页面加载慢,主线程就一直被阻塞。安卓的UI渲染和主线程是绑死的,主线程一卡,整个界面就冻住了。iOS稍微好一点,因为它有独立的渲染线程,但优酷的播放器内核用的是自研的,没做好线程隔离,所以照样卡。

更离谱的是,那个“打牌”H5页面本身就有问题。我把它单独拎出来在浏览器里打开,发现它加载了一堆没用的第三方统计脚本,还有一个特别大的webp动画序列帧。那个动画是“999”炸开的特效,一共120帧,每帧200KB,加起来快25MB。你点一下“999”,它就要把这25MB全下载完才肯渲染。网络稍微差一点,就直接卡死。

优酷为什么不修?我猜跟KPI有关。这个“打牌999”是互动团队做的,播放器团队负责稳定。两边各管各的,互动团队只管功能上线,播放器团队只管别崩。结果就是功能上了,但没人去优化那个H5页面的加载策略。反正用户卡了只会骂优酷,不会骂具体哪个团队。

还有个细节:你如果提前把那个H5页面缓存下来,再点“999”就不会卡。但优酷的缓存策略很迷,它只在WiFi下预加载,4G/5G下不加载。而且预加载的触发条件是你得先看完一个15秒的贴片广告。这就很讽刺了——你想流畅地打个“999”,得先看广告。不看广告?那就卡着吧。

我后来试了个偏方:点“999”之前,先把手机调成飞行模式,再关掉。这样优酷会走本地缓存,虽然弹幕发不出去,但至少不卡了。不过这招在iPad上没用,因为iPad版的优酷压根没做本地缓存,每次都是硬加载。

说到底,优酷这个“打牌999”卡死,不是技术做不到,是没人愿意为它负责。互动团队觉得播放器该扛住,播放器团队觉得互动团队该优化。最后用户成了测试机,点一下卡一下,卡完还得自己找原因。你要是也遇到过,别怀疑自己的手机,就是优酷的锅。

分享到: