为什么Chrome或Safari无法正常播放我的MP3?

时间:2011-07-31 02:09:15

标签: http servlets audio webkit http-headers

我在Glassfish上运行了一个Web应用程序。该应用程序使用Servlets以Java编写。

该应用程序允许您上传文件并获得该文件的直接链接。

出于某种原因,Safari和Chrome(可能是其他浏览器)在播放上传到此应用程序的MP3文件(和其他音频/视频文件)时遇到问题。

上传MP3的示例:http://uploads.graalcenter.org/upload/test.mp3

有时,Safari会加载文件并正确播放,但大部分时间它会一直停留在“正在加载...”,或者开始播放几秒钟然后停止下载。

我的浏览器正在发送这些请求标头:

GET http://uploads.graalcenter.org/upload/test.mp3 HTTP/1.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7) AppleWebKit/535.1+ (KHTML, like Gecko) Version/5.1 Safari/534.48.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Referer: http://uploads.graalcenter.org/info/test.mp3
Cache-Control: max-age=0

我的服务器正在响应这些响应标头:

HTTP/1.1 200 OK
Date: Sun, 31 Jul 2011 02:02:03 GMT
X-Powered-By: Servlet/3.0 JSP/2.2 (GlassFish Server Open Source Edition 3.2-b06 Java/Sun Microsystems Inc./1.6)
Content-Length: 1137602
Server: GlassFish Server Open Source Edition 3.2-b06
Content-Type: audio/mpeg
Accept-Ranges: none

为了进行比较,我已将同一文件上传到Apache服务器here

服务器响应这些标题:

HTTP/1.1 200 OK
Date: Sun, 31 Jul 2011 02:06:56 GMT
Connection: Keep-Alive
Content-Length: 1137602
Last-Modified: Sun, 31 Jul 2011 02:05:57 GMT
Server: Apache
Etag: "1aa08001-115bc2-4a953f48b6b40"
Content-Type: audio/mpeg
Accept-Ranges: bytes
Keep-Alive: timeout=2, max=100

文件播放正确。

我能看到的唯一区别是我的应用程序不接受范围请求,但这不应该导致任何问题,是吗?

如果我通过curl从我的网络应用程序下载MP3,它具有相同的MD5哈希,所以它不会以任何方式破坏MP3。

是否有人知道可能导致MP3无法正常播放的原因?

1 个答案:

答案 0 :(得分:0)

似乎问题是AppleCoreMedia,处理音频的插件,在不使用范围数据时无法正常工作。我不会把它归咎于苹果,因为它完全有可能我犯了一些错误,但我最终实现了HTTP Range标题,它现在每次都有效。