首页 文章

Ogg音频从PHP文件提供,在Chrome上无法访问

提问于
浏览
2

我正在开发一个使用HTML5音频元素的基本音频播放器 . 所有提供的文件都是.ogg来自另一个系统,通过API作为二进制字符串,并由一个简单的PHP处理程序(包括一些基本的安全检查)打印出来,我真的无能为力 .

然而,虽然一切都在Firefox上运行良好,但Chrome在搜索,跳过或重放方面存在一些问题(简单地说:它无法完成) . 从audio元素获取音频持续时间会返回Infinity,而currentTime返回正确的值时,无法对其进行操作 .

我开始摆弄 Headers 和响应代码,似乎没有任何工作正常 . 对部分内容使用响应代码206或在标头中声明Accept-Ranges会导致音频元素被禁用,就像源文件不存在时一样 .

搜索正确的 Headers 并没有产生太多结果,因为它总是关于部分内容和X-Content-Duration(由于VBR而计算的PITA),这在Chrome上完全没有任何作用 .

以下是在FF上工作得很好的相关 Headers . 我是否在某些事情上犯了重大错误,或者Chrome存在一些问题?

HTTP/1.1 200 OK (changing this to 206 makes the file unplayable in Chrome)
Cache-Control: public, no-store
Content-Disposition: attachment; filename="redacted.ogg"
Content-Length: 123456
X-Content-Duration: 12 (this does nothing on Chrome, works on FF)
Content-Range: bytes 0-123455/123456
Accept-Ranges: bytes (...as does including this)
Content-Transfer-Encoding: binary
Content-Type: audio/ogg
Expires: 0
Pragma: public

Edit: Opera上的某种行为,可能在所有Webkit浏览器上 . 也无法在 fread / file_get_contents 类型的情况下工作 .

1 回答

  • 0

    好吧,愚蠢的我,这真的是由于部分内容 . Chrome并不是真的喜欢立刻获取整个文件的想法(并像FF一样缓存它),所以要启用搜索和其他所需的接受范围:字节,一些传入的头解析以获取所请求的字节范围和返回上述字节范围的几行,具有正确的部分内容状态(206),而不仅仅是“字节0-(filesize-1)/ filesize”(整个文件),即使第一个请求要求它(字节= 0- ) .

    希望这也有助于其他人 .

相关问题