Html 如何使用Servlet流式传输音频/视频文件,如MP3、MP4、AVI等

Html 如何使用Servlet流式传输音频/视频文件,如MP3、MP4、AVI等,html,servlets,audio,video,media-player,Html,Servlets,Audio,Video,Media Player,我想使用servlet将我的音频/视频文件流式传输到web 我尝试使用以下servlet: protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { File file = new File("/Users/myfolder/Documents/workspace/love.mp3"); response

我想使用servlet将我的音频/视频文件流式传输到web

我尝试使用以下servlet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    File file = new File("/Users/myfolder/Documents/workspace/love.mp3");
    response.setContentType(getServletContext().getMimeType(file.getName()));
    response.setContentLength((int) file.length());
    Files.copy(file.toPath(), response.getOutputStream());
}
以及以下HTML:

<a href="/media" data-format="mp3 ogg">Click Here!</a>

然而,玩家正在加载。。。加载。。。加载


这是如何造成的,我如何解决它?

许多媒体播放器要求服务器支持所谓的HTTP范围请求。也就是说,它必须能够根据请求返回媒体文件的特定部分,并带有标题。例如,在一个10MB长的文件中,只有索引1000处的字节,而索引2000处的字节。这对于许多媒体播放器来说是必需的,以便能够足够快地跳过媒体流的特定范围和/或通过创建多个连接(每个连接请求文件的不同部分)来提高缓冲速度

然而,这是servlet中的许多附加代码,需要对HTTP规范有很好的理解。通常servletcontainer(Tomcat、JBoss AS、Glassfish等)自己的默认servlet已经开箱即用地支持了这一点。因此,如果有一种方法可以通过标准方式将媒体文件夹发布到web上,这样您就不需要为此而在家中开发servlet,那么我将继续这条路线

不清楚您使用的是哪个servletcontainer,因此我将在本例中假设Tomcat:

  • 只需将
    love.mp3
    文件放在web项目的公共web内容中,即可通过
    获得该文件,该文件具有对请求的适当支持,将用于流式传输内容

    但是,如果绝对无法使用servletcontainer自己的默认servlet,那么您需要以适当支持请求的方式重写servlet代码。您可以从和等开源示例中获得灵感

    另见:

    对不起。我错过了重要信息。这不是路径问题。。。因为当我运行没有HTML5音频播放器(可访问音频播放器)的服务器时,它完全可以工作。我想要的是通过servlet流式传输到html5播放器。是的,我知道。你读过并理解我的回答了吗?您的servlet必须支持
    范围
    请求。然而,servletcontainer的默认servet已经支持它,因此更可取的做法是通过将文件直接发布到web来利用它。好的。。感谢你的回答,但似乎需要时间来理解。我会试试。有什么方法可以为DefaultServlet提供的静态内容实现请求过滤器吗?@jwi您可以编写一个过滤器,它执行到
    DefaultServlet
    ,然后无法调用
    chain.doFilter(请求,响应)