2013-11-20 101 views
1

在內部服務器和身份驗證上流式傳輸mp3和ogg文件。 試圖將文件流式傳輸到HTML5播放器,但遇到Chrome Seek功能的問題。使用Ruby處理音頻文件

設置了所有我的頭文件,但是如何打開二進制文件,尋求定位並只發送數據從那一點到最後?

i.e. Given an mp3 file that is 119132474 long, 
    And A request comes in asking for the new start point of the file be at 21012274 
    How can I send a new binary file with only information from 21012274 to 119132474 

下面是類似的東西是什麼我想做的事,但在Node.js的http://www.extrawurst.org/blog11/2012/06/streaming-media-in-nodejs/

------- UPDATE 2014年2月15日--------

我安裝了Redis,並使用Redis作爲二進制數據的臨時緩存服務器。然後使用Redis的GETRANGE。請參閱http://redis.io/commands/getrange

回答

1

您可以用二進制模式打開文件,並使用IO模塊中的方法讀取字節。例如:

file_size = File.size('filename') 
File.open('filename', 'rb') do |file| # read in binary mode 
    file.seek(position) 
    file.read(file_size - position) # return all bytes until the end 
end 

還有一個應該工作,但我沒有測試流媒體。該方法是'binread'比第一個簡單:

File.binread('filename', start_pos, offset) 

它應該工作!

+0

對於其他人,從讀取創建一個tmp文件,寫入tmp文件,發送tmp文件來請求並確保它刪除了tmp文件。當然有更好的方法來做到這一點,所以你不需要創建tmp文件。 – pcasa