问题描述

在 safari 下,无法解析音频文件。表现为 audio 显示音频长度为0。查看 devtool, 发现请求状态码为206,但是记录为红色,preview显示为Error。audio 触发 error 事件。

同时,在 chrome 可以正常解析并播放。

初步应对

怀疑是文件类型无法解析。增加 <source type="audio/wave" />, 可以正常播放。

进一步追查

  1. App 中存在其它 wav,为什么其它 wav 文件没有问题?
  2. 首先怀疑是文件扩展名问题;此时发现,正常的请求文件不带扩展名,异常的请求带扩展名,排除
  3. 发现异常请求content-type为:application/octet-stream,正常请求为:audio/wave。至此原因基本辨明。
  4. 联系 file serve 的同事,得知服务上传时的 content-typeaudio/vnd.wave, 不是通常的 audio/wave ,导致 content-type 被改写。
  5. 解决方案:前端使用 suorce 做应急处理,file serve 开放 audio/vnd.wave

有趣的细节

audio/vnd.wave官方的 mimetype,然而它的兼容性不如 audio/wave, 社区更认可后者,(通过这一次的问题也可以看出来)。

如果你感兴趣,这里有一篇讨论 https://github.com/patrickmccallum/mimetype-io/issues/18 。讨论的结论是:RFC 是信息性的,它不代表互联网社群的共识或建议。

Reference

rfc2361

octet-stream

audio/wav