今天下午,西瓜视频第六集的进度条卡在 17 分 42 秒,我盯着那个转圈图标看了十一秒。

一段 m3u8 索引换来的教训。有些东西每周重来一次,有些东西永远停在那一秒。

我把它记下来了。17 分 42 秒,对应的是《我在他乡挺好的》第六集,女主角在天台接电话那场。画面停在她抬手擦眼泪的前一帧。

我切到浏览器开发者工具。Network 面板里,那条 .m3u8 请求返回的是 200。内容不大,几 KB。往下拉,是一串 TS 分片的地址,每片 4 秒,一共 6 片。也就是说,索引只给了 24 秒的窗口。播放器拿到这 24 秒,播完,再去请求下一条索引。链路上任何一环慢了,你看到的转圈图标就会多转一会儿。

我数了数,那天下午那条链路上,有 3 个域名在轮换。一个是主站,一个是 CDN,还有一个我从来没注意过的短域名。第三个的响应时间,比另外两个慢了将近 700 毫秒。这就是那十一秒的来源。

服务器机架的指示灯在暗处亮着
机架上的灯一直在亮。慢的那一跳,藏在某一根网线后面。

这不是西瓜视频独有的问题。任何用 m3u8 做分片流的平台,都会遇到这个。m3u8 的本质是一张菜单,不是一个文件。菜单上写着菜在哪个窗口,窗口还开着,你就能拿到。窗口关了,你再敲门,就没人应。多数时候没人应只是慢,少数时候是真没人。

我之前在 日韩视频 国产视频 这个站上也碰过类似的事。那边用的是同样的分片逻辑,但索引窗口给得宽,一次给 10 片,40 秒。缓冲余量大,卡顿就少。代价是切集的时候会更慢,因为要重新拉一次索引。西瓜这边更激进,窗口小,起播快,但中途断流的概率高。这是取舍,不是 bug。

说实话,我认为大部分观众骂"西瓜视频卡",骂错地方了。卡的不是播放器,是那条链路上最短的一块板。换一个网络、换一个时段,同一个链接可能顺得像另一个人写的。我上周三晚上十一点重试了那一集,从头到尾没停过一次。同一个 URL,同一个设备。

我把这个观察记在一个本子上。纸的,A5,格子内页。从 2024 年 3 月开始记,到现在第 4 本。记的东西很碎:哪个站什么时段最稳,哪条 m3u8 的索引窗口是 4 秒哪条是 8 秒,哪个 CDN 的短域名喜欢在晚上八点抖。没什么用,就是记着。

有人问我为什么不做个自动监测脚本。我试过。写了一个,跑了两周,输出一堆 CSV,我一次没打开过。后来我明白了,我要的不是数据,是"我看见了"这件事本身。手写一遍,记一笔,那十一秒就变成一个具体的数字,不再是一团烦躁。

这个站也是这么来的。每周更新一次,写点具体的东西。不追热点,不做评测,就是一个人把看见的记下来,放在一个不用登录、没有弹窗的页面上。翻到哪条算哪条。

我叫陈默,住在杭州,写代码,也写点别的。这个站是我自己搭的,没有团队,没有广告,一周开一次编辑器,写一条。

我从 2022 年开始断断续续记录流媒体片源的事,起因是自己看剧时总卡,查了半天发现是分片索引的问题,没人写过这件事。我就自己写。

我不觉得这算什么研究。就是一个人看见了,记下来,放在一个页面里,谁来谁看。没有订阅,没有推送,没有"为您推荐"。

「缓冲不是等待,是系统在告诉你,有一块拼图它还没找到。」

—— 出自一个叫老周的播放器开发者,2023 年在一个技术论坛的回复里