这可能是一个Servlets问题或一个HTML5问题,具体取决于解决方案是… :)
我有一个(Tomcat)Servlet,它提供音频的短片段,然后将其提取为HTML5音频元素。音频可以正确播放,但在某些浏览器上只能播放一次(因此,尝试“后退”或重放音频将无法正常工作)。我怀疑这是因为我的Servlet没有报告它支持范围请求:我注意到给定同一台服务器上的静态音频文件,Apache添加了HTTP“范围单元”响应头,然后在这种情况下重放文件案件。因此,我假设在出现问题的浏览器上,为了重播文件,浏览器发出HTTP Content-Range请求,而不是缓冲整个文件或重新请求整个文件。(至少在Safari上,重放从Servlet提供的音频效果很好:
所以我的问题是:
HTML中是否有一种方法可以请求浏览器在播放时缓冲整个音频文件以允许重播,而不是服务器不一定需要支持范围请求?
如果不是,是否有人有响应Servlet的范围请求的经验?我假设这只是一种情况(a)响应初始请求发送“范围单位”响应代码,然后(b)寻找相关的HTTP请求标头(“ Content-Range?”)(我猜这就是它们的处理方式?)在后续请求中,仅投放音频的相关部分?我应该注意哪些陷阱?
即使有,也不是所有浏览器都支持,特别是手机/ ipads / etc。
有没有人有响应Servlet的范围请求的经验?
还有由BalusC提供的实现。我已将其移植到我的环境中,除了一些小问题(很可能与实现无关,但与客户端的具体情况无关),它的效果很好。