手机chrome使用audio,请求音频数据总是被canceled。

我现在有个需求,就是在网页中播放歌曲。歌曲资源是放在七牛上的,并且是私有资源。每次客户端需要播放音乐的时候都需要先向服务器发送请求,并带上认证信息,然后会通过302跳转到七牛服务器请求数据。

但现在的问题来了,在桌面版chrome里可以播放歌曲,手机端chrome却不行。

桌面chrome版本为 Chromium 32.0.1700.107 Ubuntu 13.10
手机chrome版本为 Chrome 31.0.1650.59

桌面chrome请求结果

首先会向/api/muzzik/music发送请求,然后会收到302跳转,跳到七牛服务器,七牛会返回数据,并设置head Content-Type:audio/mpeg
桌面chrome请求成功

手机chrome请求结果

手机端在302跳转之后直接就Canceled,查看请求信息,没发现服务器返回任何数据。

手机chrome请求失败
手机chrome请求的头部信息

监听audioElement的error事件之后,发现错误原因是MEDIA_ERR_SRC_NOT_SUPPORTED,但它没有向服务器请求过数据,怎么就知道返回的数据就不支持了呢?而且我也试过直接将链接输入到地址栏里,可以出现播放器窗口并可以播放,为什么设置成audio的src就不行了呢?

error事件
手机播放没问题

而且最奇怪的是,用手机访问虾米,查看网络记录也显示相关的音频文件被cancel掉了,为什么它就可以播,而且没有提示错误??

回复
阅读 6.1k
1 个回答

自己解决了问题。

原来手机版的chrome,在使用audio,video标签的时候,src不支持302跳转。