2011-07-31 5 views
2

私はGlassfishで動作するWebアプリケーションを持っています。このアプリケーションは、サーブレットを使用してJavaで記述されています。ChromeやSafariでMP3が正しく再生されないのはなぜですか?

このアプリケーションでは、ファイルをアップロードして、そのファイルに直接リンクすることができます。

何らかの理由で、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

ファイルが正しく再生されます。

唯一の違いは、アプリケーションが範囲リクエストを受け付けないことですが、これで問題は発生しませんか?

私のウェブアプリケーションからカールを介してMP3をダウンロードした場合、それは同じMD5ハッシュを持っているので、MP3を壊すことはありません。

MP3を正しく再生できない原因は何ですか?

+0

自家製サーブレットでファイルを提供しているか、Glassfishのデフォルトサーブレットにジョブを委任していますか? Glassfishのデフォルトサーブレットが範囲リクエストやEtagヘッダーなどをサポートしていないと、私は非常に驚いています。いずれにせよ、私はSafariをやっていないが、犯人が欠落していると思う。Connection:Keep-Aliveヘッダ。 – BalusC

+0

自分で出力を送信しています(IOUtils.copy(fileStream、out))。私はそのヘッダーを試してみるよ、ありがとう。 –

答えて

0

オーディオを扱うプラグインであるAppleCoreMediaが範囲データを使用していないときに正しく動作しないという問題が発生したようです。私はAppleにそれを非難することを夢中にしていないだろう。間違いがあった可能性があるが、HTTP Rangeヘッダーの実装が終わり、毎回動作するようになった。

+0

これが本当であるかわかりません。私は窓で同じ問題を経験しています。 – Nova

関連する問題