2013-08-06 36 views
0

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

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中做到这一点?

+1

媒体文件不能这样工作。只要把它们看作黑盒子。你可能正在寻找的是将你的视频文件转换为流媒体格式,并允许你的客户端从他们想要的任何点进行流式传输。 – Olaf

+0

你说的是有道理的,但老实说,我甚至不知道如何开始。我想当我做了url.openStream()时,它将它转换为流式格式。 – GiangP

回答

0

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

通过HTTP流式传输,“智能”存在于知道如何读取主播放列表文件以及如何避开无数媒体文件或众多媒体文件片段的客户端中。 HTTP服务器只需提供Range标头指定的文件或文件片段。