2013-11-20 53 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