【问题标题】:Download part of a video file through a servlet通过 servlet 下载视频文件的一部分
【发布时间】:2013-08-06 18:25:59
【问题描述】:

所以我有一个在线视频的链接(例如 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 下载整个视频文件并且视频播放正常。但是,如果我想在视频 downloadFile(URL myURL, long startByte, long endByte) 上指定特定的字节范围,则视频不会播放。我使用函数 input.skip() 向前跳到 startByte 但我怀疑它跳过了 mkv 格式的一些重要标题。这就是为什么玩家无法识别它。有谁知道如何在java中做到这一点?

【问题讨论】:

  • 媒体文件不能这样工作。只需将它们视为黑匣子。您可能正在寻找的是将您的视频文件转换为某种流媒体格式,并允许您的客户从他们想要的任何点进行流式传输。
  • 你说的很有道理,但老实说,我什至不知道如何开始。我想当我执行 url.openStream() 时,它会将其转换为流格式。

标签: java servlets cdn http-streaming


【解决方案1】:

有 3 种主要的 HTTP 流技术:Apple HTTP Live Streaming、Microsoft Smooth Streaming 和 Adob​​e HTTP Dynamic Streaming。这些技术中的每一种都提供了将视频转换为相应格式的工具。如果您从一个大视频文件开始,Apple 和 Adob​​e 工具会创建许多小文件,例如每个包含 10 秒的视频,以及一个播放列表文件,该文件将为客户提供如何阅读它们的线索。我相信微软工具实际上可以生成单个文件,但它会在内部包含小的视频片段。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多