@Lenciel

移动端 MP4 无法加载

昨天因为讨论裸眼 3D 动效的实现,无意中打开一篇之前的帖子,发现所有的视频文件加载都有问题。

这是因为我之前做性能优化的时候,把所有的 GIF 文件转成了 MP4 用CDN 部署之后,没有在各种环境下充分测试过。

大概看了一下,在桌面浏览器上都能正常显示,但是在移动设备上就不行。我用 Safari 的开发者模式调试自己 iPhone 上的网页,可以看到请求这些视频的时候,有一些报错。

一开始以为是七牛云对 「Range」 的处理出了问题,但是我用 curl 查看服务器的返回都是对的。

在 Mac 上用 Safari 直接打开页面,也确实能够访问。

那么,就只剩下视频编码的问题了。我查了一下苹果的文档,原来确认被支持的 H.264 Profile 只有:

H.264 Baseline Level 3.0, Baseline Level 3.1, Main Level 3.1, and High Profile Level 4.1.

我看了一下自己的文件:

$ ffmpeg -i false_start.mp4

  Duration: 00:00:03.00, start: 0.000000, bitrate: 139 kb/s
    Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuv444p, 500x269, 135 kb/s, 16.67 fps, 16.67 tbr, 12800 tbn, 33.33 tbc (default)

所以,我之前直接用 ffmpeg 把 GIF 转 MP4,得到的文件是 High 4:4:4 Predictive 的文件,于是在手机浏览器上 decode 失败了。

重新做一次转码,然后部署到七牛云并刷新缓存就 OK 了:

for i in *.gif; do
    [ -f "$i" ] || break
        echo "this is ${i%%.*}"
        ffmpeg -f gif -i -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" $i ${i%%.*}.mp4
done

这件事教育了我,not all mp4 files are equal,也让我明白了,为啥七牛云上有一个服务是转换 GIF 为 MP4,当时我还纳闷,这还需要个服务,ffmpeg 一句命令还能出错么……

再见,达叔

常温常压下,人们看重的是花。

因为花,有投入也有产出:开放枯萎,轰轰烈烈,周而复始,意味深长。

草,默默生长,默默衰败,它不惊动你,你也记不起它。

但架不住人生海海,谁都因为一些莫名其妙的原因,养过一些草。

我记得刚创业的时候,有兄弟买了一盆文竹,准备送给心上人。结果他不在人家心上,礼物没送出去,随手扔在办公室。194 抽烟,它就抽烟,基友立喝可乐,它就喝可乐。大伙有兴致的时候,一天到晚浇个不停,咖啡也倒给它,茶水也倒给它;忙起来,十天半个月不理不睬也是常有的事情。文竹过得如此旱涝无常,加上营养搭配诡异,很快就枯黄了。

后来是不是还摆过一盆含羞草。每个人路过,都要上手抚弄一番。没表演多久,它也枯黄了。

但这次应该不是死于食物中毒,可能是过劳死,也可能是羞愤自尽。

那时候我们对所有的草都这样,新鲜几天,然后胡来。因为这些草,是我们生命里太微不足道的过客。只有辗转几个城市,颠沛些许人生,知道了自己也不过是个过客,才会在它们消失的时候,心下生出些唇亡齿寒的黯然。

也是在这个时候,我们才又想念起当年风轻日暖时,它们为我们折射的,那些亮光。

达叔,后会有期。