所以我有一个在线视频的链接(例如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中做到这一点?
答案 0 :(得分:0)
有3种主流HTTP流技术:Apple HTTP Live Streaming,Microsoft Smooth Streaming和Adobe HTTP Dynamic Streaming。这些技术中的每一种都提供将视频转换为相应格式的工具。如果你从一个大的视频文件开始,Apple和Adobe工具会创建一些小文件,每个文件包含10秒的视频,以及一个播放列表文件,它将为客户提供如何阅读它们的线索。我相信Microsoft工具实际上可以生成单个文件,但它内部会包含小视频片段。
通过HTTP流式传输,“智能”存在于客户端,该客户端知道如何读取主播放列表文件以及如何绕过大量媒体文件或众多媒体文件片段。 HTTP服务器只需提供由Range标头指定的文件或文件片段。