2013-08-06 52 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標頭指定的文件或文件片段。