2014-12-05 23 views
2

我有一个坐在nginx web服务器上的rails网络应用程序。我在我的服务器上有一些音频文件,我希望人们能够听到它们,并能够从这一点上寻找音频文件的任何部分来收听。如何在没有直接链接的情况下流式传输音频文件

简单吧?

我在我的html5音频元素的src中使用了直接链接。它效果很好。该文件可以播放和寻找工作。

输入安全性和可审核性。

我的音频文件很敏感。我只希望某些人能够听到他们。我也需要知道他们每次听到他们。突然公共目录不起作用。

输入rails的send_file。

Send_file最初看起来正是我所需要的。它允许rails为我的音频文件提供服务,并且可以将我的文件保存在受保护的目录中,我可以检查当前用户的权限,并且可以创建适当的审计线索。除...

用send_file我找不到。这是一个交易断路器。

一些stackoverflow问题的地址获取send_file来处理HTTP范围/字节范围请求。我回顾的是:

what is the proper way to serve mp4 files through rails...

rails media file stream accept byte range request through send file ...

做更多的研究之后,我发现下面的博客文章: https://blog.echoplex.us/2014/08/19/so-you-want-to-stream-videoaudio-with-rails/

TL;博士 不使用导轨由send_file服务媒体。不要试图让它像stackoverflow问题说你可以。相反,使用nginx和X-Accel-Redirect,并最终得到一个类似于你的请求流水线 - >你正在考虑采取他的方法,但不知道如果有更好的方法来做到这一点。

我有什么选择?

(也,你可以假设我使用轨道和Nginx的当前版本)

+0

你解决了这个问题吗? – Anatoly 2015-09-22 22:24:22

+0

好吧,它已经有一段时间了。我想我们最终可能会用S3来提供音频文件。所以没有很好的与铁轨有关的答案。我必须回到代码才能确定。 – 2015-09-23 18:12:57

回答

2

不要的sendfile使用方法请。使用X-Accel-Redirect或以下建议。

Nginx secure_link模块可以帮助您直接从磁盘上使用专用链接提供文件。不需要后端。完整的例子是here

相关问题