无法在safari上播放wav文件

时间:2016-08-17 16:47:50

标签: html ios ruby-on-rails safari wav

我试图在safari上播放一个wav文件。几乎与此相同的问题:playing a WAV file on iOS Safari

但接受的答案并不奏效。我使用带有apache和phusion乘客的rails服务器。音频文件可以在Chrome上播放,但不适用于任何游戏(桌面,移动和uiwebview)。

我使用

在rails中发送文件
send_file filename, :type => "audio/x-wav", :disposition => "inline"

从其他堆栈溢出q& a,我尝试将Content-Range和Content-Length标头添加到响应中

size = File.size(filename)
response.header["Content-Range"] = "bytes 0-#{size-1}/#{size}"
response.header["Content-Length"] = "#{size}"

我收到的错误非常不明显"无法加载资源:插件已处理加载"

以下是回复标题

x-runtime   0.589797
Date    Wed, 17 Aug 2016 16:38:49 GMT
X-Content-Type-Options  nosniff
Server  Apache/2.2.15 (CentOS)
X-Powered-By    Phusion Passenger 5.0.7
Status  200 OK
Content-Type    audio/x-wav
content-range   bytes 0-3243/3244
Cache-Control   private
Content-Transfer-Encoding   binary
Content-Disposition inline; filename="eng-182-msg0026.wav"
Connection  close
Content-Length  3244
X-XSS-Protection    1; mode=block
x-runtime   0.589797

2 个答案:

答案 0 :(得分:1)

当请求直接链接到媒体文件时,这将起作用。但我是通过控制器请求这个。 Safari正在为特定范围制作多个http请求。服务器每次都响应整个文件,这就是它失败的原因。

令人讨厌的是,Safari网络检查员决定不显示"范围"网络请求中的标头。它会显示其他http标题,但在这种情况下不是最重要的标题...

无论如何,简短的回答,回复每个请求所需的正确字节范围。

答案 1 :(得分:0)

我遇到了同样的问题,在Safari上播放音频文件不起作用,但在Chrome和其他所有浏览器上,一切都按预期工作。

在响应标头中设置正确的Content-Range解决了我的问题。我使用了分叉的gem send_file_with_range,其中包含对Rails 5.1的修复。

我推荐这个gem,因为这个gem中的代码非常简单,而且这个解决方案看起来最简单,最快捷。

注意:此解决方案特定于Ruby on Rails开发人员,但一般解决方案是在响应标头中为每个请求设置正确的Content-Range。

我希望这会对某些人有所帮助。