Java 如何在服务器上处理视频/mp4流的范围请求

Java 如何在服务器上处理视频/mp4流的范围请求,java,http,networking,apache-httpcomponents,Java,Http,Networking,Apache Httpcomponents,我目前正试图在运行Java和ApacheHttpCore的服务器上实现远程请求,目标是跳过mp4视频流 我实现了一个异步文件实体,它正确地服务于字节范围请求。然而,当在网络浏览器上进行流媒体传输时,我无法在视频中搜索。预期的行为是,当我跳过时,当前请求被包装,并针对相应的字节范围发送一个新请求。但是,浏览器会继续使用第一个请求,只会从最新缓冲位置下载更多内容,即从不实际跳转,从而线性下载整个文件 所以,我的问题是,我如何结束这个请求?对于来自浏览器的小而有限的请求(例如“范围:字节=100-10

我目前正试图在运行Java和ApacheHttpCore的服务器上实现远程请求,目标是跳过mp4视频流

我实现了一个异步文件实体,它正确地服务于字节范围请求。然而,当在网络浏览器上进行流媒体传输时,我无法在视频中搜索。预期的行为是,当我跳过时,当前请求被包装,并针对相应的字节范围发送一个新请求。但是,浏览器会继续使用第一个请求,只会从最新缓冲位置下载更多内容,即从不实际跳转,从而线性下载整个文件

所以,我的问题是,我如何结束这个请求?对于来自浏览器的小而有限的请求(例如“范围:字节=100-1000”),它工作得很好,因为它发送得非常快;对于无限的请求(例如“范围:字节=100-”文件大小为10GB,实体为整个文件提供服务),请求只是没有完成。我是不是在50MB之后就终止了TCP连接?客户端是否发送了我未捕获的HTTP中止请求?一般来说,HTTP是如何做到这一点的

编辑:我使用TCP超时进行了测试,但无效-浏览器报告网络错误,因此在整个过程中使用相同的套接字


提前谢谢。

好的,我发现主要问题是缺少ETag/Last Modified、Date和Cache控制头。现在它适用于所有浏览器。但是,我的问题仍然是,一个巨大的HTTP请求如何停止/仅部分下载,然后被另一个请求替换?我发现我使用的是HTTP 1.0,只是TCP连接关闭了吗?不过,我没有任何例外情况表明这种行为。