Java 通过servlet下载部分视频文件

Java 通过servlet下载部分视频文件,java,servlets,cdn,http-streaming,Java,Servlets,Cdn,Http Streaming,因此,我有一个指向在线视频的链接(例如somewebsite.com/myVideo.mkv),我想通过servlet在服务器上下载该视频。视频文件已启用CDN,因此基本上任何公共用户都可以将链接放入浏览器,然后开始播放。这是我目前掌握的代码 downloadFile(URL myURL){ InputStream input = myURL.openStream(); File video = new File ("/path-to-file/" + myURL.getFile()

因此,我有一个指向在线视频的链接(例如somewebsite.com/myVideo.mkv),我想通过servlet在服务器上下载该视频。视频文件已启用CDN,因此基本上任何公共用户都可以将链接放入浏览器,然后开始播放。这是我目前掌握的代码

downloadFile(URL myURL){
   InputStream input = myURL.openStream();
   File video = new File ("/path-to-file/" + myURL.getFile());
   FileOutputStream output = new FileOutputStream(output);

   byte[] buffer = new byte[1024];
   int read;

   // Write full range.
   while ((read = input.read(buffer)) > 0){
     output.write(buffer, 0, read);
   }

   output.close();
   input.close()
}

如果我这样做,它将从URL下载整个视频文件,视频播放效果良好。但是,如果我想在视频下载文件上指定一个特定的字节范围(URL myURL、long startByte、long endByte),视频不会播放。我使用函数input.skip()向前跳到startByte,但我怀疑它跳过了mkv格式的一些重要头。这就是为什么玩家无法识别它。有人知道如何在java中实现这一点吗?

有三种主要的HTTP流媒体技术:Apple HTTP实时流媒体、Microsoft Smooth流媒体和Adobe HTTP动态流媒体。每种技术都提供了将视频转换为相应格式的工具。如果你从一个大的视频文件开始,苹果和Adobe工具会创建一些小文件,每个文件包含10秒的视频,以及一个播放列表文件,为客户端提供如何阅读它们的线索。我相信微软的工具实际上可以生成一个文件,但它会在内部包含一些小的视频片段


通过HTTP流,“智能”存在于客户端,它知道如何读取主播放列表文件,以及如何绕过大量媒体文件或大量媒体文件片段。HTTP服务器只需为范围标头指定的文件或文件片段提供服务。

媒体文件不能以这种方式工作。只要把它们看作黑匣子就行了。你可能正在寻找的是将你的视频文件转换成某种流媒体格式,并允许你的客户从他们想要的任何点进行流媒体。你说的有道理,但老实说,我甚至不知道如何开始。我认为当我创建url.openStream()时,它正在将其转换为流格式。