问题描述
在 safari 下,无法解析音频文件。表现为 audio 显示音频长度为0。查看 devtool
, 发现请求状态码为206,但是记录为红色,preview显示为Error。audio
触发 error
事件。
同时,在 chrome 可以正常解析并播放。
初步应对
怀疑是文件类型无法解析。增加 <source type="audio/wave" />
, 可以正常播放。
进一步追查
- App 中存在其它 wav,为什么其它 wav 文件没有问题?
- 首先怀疑是文件扩展名问题;此时发现,正常的请求文件不带扩展名,异常的请求带扩展名,排除
- 发现异常请求
content-type
为:application/octet-stream
,正常请求为:audio/wave
。至此原因基本辨明。 - 联系
file serve
的同事,得知服务上传时的content-type
为audio/vnd.wave
, 不是通常的audio/wave
,导致content-type
被改写。 - 解决方案:前端使用
suorce
做应急处理,file serve
开放audio/vnd.wave
。
有趣的细节
audio/vnd.wave
是官方的 mimetype,然而它的兼容性不如 audio/wave
, 社区更认可后者,(通过这一次的问题也可以看出来)。
如果你感兴趣,这里有一篇讨论 https://github.com/patrickmccallum/mimetype-io/issues/18
。讨论的结论是:RFC 是信息性的,它不代表互联网社群的共识或建议。