我在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无法正常播放的原因?
答案 0 :(得分:0)
似乎问题是AppleCoreMedia,处理音频的插件,在不使用范围数据时无法正常工作。我不会把它归咎于苹果,因为它完全有可能我犯了一些错误,但我最终实现了HTTP Range标题,它现在每次都有效。