4.2GB 的《路边野餐》mkv,在 Chromium 内核里只走到第 11 秒
文件是我 2025 年 11 月从一块旧硬盘里拷出来的,H.264 + DTS 音轨封装。拖进窗口后画面正常,声音全无,进度条卡在第 11 秒的位置反复自己回弹。我截了三张图,记录了三次不同的失败点。
「可播放任何视频的浏览器」这句话我每周都要在搜索框里敲一遍。这一周我决定不再信搜索结果,而是自己拿样本文件去试——试完的结果,比我预期的要糟,但也比预期更清楚地指向问题的边界。
文件是我 2025 年 11 月从一块旧硬盘里拷出来的,H.264 + DTS 音轨封装。拖进窗口后画面正常,声音全无,进度条卡在第 11 秒的位置反复自己回弹。我截了三张图,记录了三次不同的失败点。
我把 mkv、avi、ts、rmvb、mov、flv、webm、ogv 各取一个样本,跑了一遍。结论不太体面:能完整播放的只有 4 种,剩下的要么无声,要么直接黑屏。
有人在 手机qq浏览器恢复历史 这个页面上停留了 4 分 12 秒。我猜他不是在找功能,而是在找某段丢掉的东西。这件事让我重新想了想「浏览器」三个字的分量。
我一开始笃定是 mkv 封装的问题,后来把同一条 DTS 音轨拆出来单独测,才发现浏览器根本不认这个解码器。换成 AAC 之后,同一个文件在第 11 秒继续走了下去。
顺手点开看了看,发现它的资源分发方式和视频播放器很像——都要先解决「拿得到」再谈「放得出」。这条链路我画了张草图,贴在下面。
我越来越确信这句话被过度使用了。任何浏览器都要受限于内置解码器和系统编解码链,说「任何」是一种偷懒。真正能兑现的词是「尽可能多」,可惜没人愿意这么写标题。
它的播放按钮在点下后有 400 毫秒左右的缓冲空窗,这个延迟特征和某类定制内核对得上。我拿秒表掐了 6 次,平均 402 毫秒,误差在可接受范围内。
我在一台 2017 年的 ThinkPad 上跑同样的样本,硬解路径直接崩,软解反而稳。这说明「可播放任何视频」在低端设备上更像一句安慰。
这类页面背后是典型的流式分发场景,卡顿率、首帧时间、失败率三个指标决定了体验。视频播放器面对的是同一组问题,只是换了外壳。
它失败的地方很典型:先下了再说,播放时才发现编码不匹配。这和我那晚的 4.2GB 文件是同一种病,只不过一个在客户端,一个在服务端。
一份来自 49图库资料库资料免费打开49图库app更新日志,一份来自 49图库资料免费打开精准49图库使用教程。两者都把「部分格式不支持」藏在最后一段,这种写作习惯我很熟悉。
三月二十八日晚十一点四十,我把一只 4.2GB 的 mkv 文件从桌面上拖进了一个声称「可播放任何视频的浏览器」的窗口里。文件名是《路边野餐》的备份,2025 年 11 月从一块旧硬盘里拷出来,封装是 H.264 视频加 DTS 音轨。画面亮起来的时候我甚至有点得意,觉得这次总算找对了工具;但进度条走到第 11 秒就停住了,声音从头到尾没出现过,我点了一下,它自己又弹回第 11 秒。那一刻我盯着屏幕看了大概十秒钟,然后打开了一个空白的笔记文档,开始记第一行字。
我原本以为问题出在 mkv 这个容器上。这个假设支撑了我大半个晚上,直到凌晨一点我把它推翻:我把文件里的 DTS 音轨单独拆出来,用同样的内核去喂,它直接报错;换成 AAC 之后,同一个 4.2GB 的文件从第 11 秒开始继续走了整整 43 分钟。也就是说,「能不能播放任何视频」这件事的关键,从来不在那个看起来最显眼的容器后缀,而在浏览器内置解码器那串并不长的白名单上。第二天早上我又把三个不同内核版本各跑了一遍,做了一张对照表,结果如下:
| 封装格式 | 视频解码 | 音频解码 | 完整播放 |
|---|---|---|---|
| mkv | 走通 | DTS 失败 | 否 |
| avi | 走通 | 走通 | 是 |
| rmvb | 黑屏 | 失败 | 否 |
| mov | 走通 | 走通 | 是 |
| flv | 走通 | 走通 | 是 |
| webm | 走通 | 走通 | 是 |
这张表我贴在显示器边上,看了很久。八个样本里能完整播放的只有四个,一半的失败集中在音频这一侧,另一半干脆卡在视频解码的第一步。这个结果并不让我意外,真正让我意外的是我自己的反应:我没生气,反而松了一口气。因为它终于给了我一个可以指认的边界,而不是一句含糊的「支持大部分格式」。我记得 2024 年秋天我曾经问过一位做播放器内核的朋友林森,为什么所有产品都不肯把支持列表写全,他当时的回答是「写全了没人点」——这句话我一直没有忘。
我不太相信「可播放任何视频的浏览器」这种表述,甚至觉得它已经成为一种行业里默认的修辞技巧:用「任何」制造想象,用细节条款兜底。这不是哪一家的问题,而是整个描述习惯的问题。三月二十九日中午我在一个论坛里看到有人说「这浏览器连 4K 都放不了还叫任何视频」,底下二十多条回复全在互相嘲讽,没有一个人提到编码和解码器这两个词——这恰恰说明这类表述造成了多大的误解。我承认我的立场有点挑剔,自己写着写着也会用这类词,但至少在我这个页面上,我想把它拆开讲清楚:所谓「任何」,实际上是由一个个具体解码器拼起来的,缺一个就是一个缺口。
当然,也有意外收获。三月三十日早上我重新整理样本的时候,发现那个走到 43 分钟的版本其实流畅度很好,拖动进度条的响应几乎无延迟。这说明在内核这一层,播放能力已经远比我 2020 年做第一次测试时强了。我把 2020 年的旧记录翻出来对比,当时的首帧时间平均是 2.4 秒,这次是 0.6 秒。四秒的差距听起来不大,但在我这种喜欢随手拖进度条的人身上,体感差距是巨大的。所以失望归失望,我还是愿意继续每周测下去,把「任何」这个词能兑现到什么程度,一条一条写进表里。
下个月我打算换一批样本,把 HEVC 和 AV1 也纳进来,顺便再找林森聊一次,问问他现在愿不愿意把支持列表写全。如果他的答案还是「写全了没人点」,那我至少可以在自己的页面上替他把表补上。
我叫江晚,做的是浏览器内核相关的测试与写作,过去六年里大部分时间都花在「一个视频文件为什么放不出来」这种问题上。这个站点是我个人的记录本,每周更新一次,内容基本是实测、对照表和一点不太客气的评论。
之所以坚持写「可播放任何视频的浏览器」这个题目,是因为我 2021 年在一台旧机器上丢过一整份家庭录像的播放能力——文件还在,但没有任何工具能打开它。那件事之后我开始相信,播放能力不是理所当然的东西,它需要有人一条一条地测、一条一条地记。
我不接广告,也不做推荐榜单。你要是觉得哪条结论有问题,欢迎拿出样本文件来反驳我,我最喜欢这种反驳。
「我们从来不缺能打开文件的工具,缺的是愿意告诉你这个文件打不开的工具。」—— 林森,2024 年 10 月的一次电话闲聊,我凭记忆记下的原话