3

这可能是 Servlets 问题或 HTML5 问题,具体取决于解决方案的结果...... :)

我有一个(Tomcat)Servlet 提供音频短片,然后在 HTML5 音频元素中拾取这些短片。音频正确播放,但在某些浏览器上仅播放一次(因此尝试“倒带”或重播音频不起作用)。我怀疑这是因为我的 Servlet 没有报告它支持范围请求:我注意到给定同一服务器上的静态音频文件,Apache 添加了 HTTP“范围单元”响应标头,然后重播文件然后在这样的情况下工作案例。所以我假设在我遇到问题的浏览器上,为了重播文件,浏览器会发出 HTTP Content-Range 请求,而不是缓冲整个文件或重新请求整个文件。(至少在 Safari 上,重播从我的 Servlet 提供的音频可以正常工作:我

所以我的问题:

  • HTML中有没有办法请求浏览器在播放时缓冲整个音频文件以允许重播,而不是服务器必须支持范围请求?

  • 如果没有,是否有人有响应来自 Servlet 的范围请求的经验?我假设这只是(a)发送“范围单元”响应代码以响应初始请求,然后(b)寻找相关的 HTTP 请求标头(“Content-Range?”)的情况(我猜这就是他们的处理方式?)在后续请求中并且只提供音频的相关部分?有什么我应该注意的陷阱吗?

4

1 回答 1

1

HTML中有没有办法请求浏览器在播放时缓冲整个音频文件以允许重播,而不是服务器必须支持范围请求?

即使有,也不是所有浏览器都支持它,尤其是手机/ipad/等。

有没有人有响应来自 Servlet 的范围请求的经验?

BalusC 提供了实现。我已将它移植到我的环境中,除了一些小问题(很可能与实现无关,但与客户端细节有关)外,它运行良好。

于 2012-11-10T20:30:49.010 回答