2012-11-10 38 views
2

這可能是一個Servlet的問題或HTML5的問題,這取決於溶液變出什麼是... :)從一個Java servlet服務的音頻數據的HTML5音頻控制

我有一個( Tomcat)Servlet提供音頻的短片段,然後用HTML5音頻元素進行拾取。音頻可以正常播放,但在一些瀏覽器上只播放一次(因此試圖「倒帶」或重放音頻不會奏效)。我懷疑這是因爲我的Servlet沒有報告它支持範圍請求:我注意到,如果在同一臺服務器上有一個靜態音頻文件,Apache會添加HTTP「range-unit」響應頭,然後重播該文件案例。所以我認爲,在我遇到問題的瀏覽器上,爲了重放文件,瀏覽器發出HTTP內容範圍請求,而不是緩衝整個文件或重新請求整個文件。 (在Safari上至少,重放聲音從我的Servlet服務工作正常:我猜是因爲Safari瀏覽器緩存的整個音頻。)

所以我的問題:

  • 有在HTML的方式請求瀏覽器緩衝播放的整個音頻文件以便允許重播,而不是服務器需要支持範圍請求?

  • 如果沒有,有沒有人有任何經驗來響應從Servlet的範圍請求?我假設它只是(a)發送一個「範圍單位」響應代碼以響應初始請求,然後(b)尋找相關的HTTP請求標題(「Content-Range?」)(我想這是他們如何處理?)隨後的請求,並只提供相關部分的音頻?我應該注意哪些缺陷?

回答

1

有在HTML的方式來請求瀏覽器緩存上,以便使回放而不是服務器需要一定支持範圍請求播放整個音頻文件?

即使有,它也不會支持所有的瀏覽器,特別是手機/ ipads /等。

沒有人有任何經驗來響應從Servlet的範圍請求?

There's implementation provided by BalusC。我已經將它移植到我的環境中,除了some minor issues(它們很可能與實現無關,但與客戶端細節無關),它的效果很好。