ruby-on-rails - 如何在没有直接链接的情况下流式传输音频文件

标签 ruby-on-rails audio nginx

我有一个 Rails Web 应用程序位于 nginx Web 服务器上。我的服务器上有一些音频文件,我希望人们能够收听它们,并且能够寻找音频文件的任何部分从该点开始收听。

简单吧?

我在 html5 音频元素的 src 中使用直接链接。效果很好。文件可以播放并且搜索成功。

输入安全性和可审核性。

我的音频文件很敏感。我只希望某些人能够倾听他们的声音。我还需要知道他们每次听他们说话的时间。突然间公共(public)目录无法工作。

输入rails的send_file。

Send_file 最初似乎正是我所需要的。它允许 Rails 为我的音频文件提供服务,我可以将我的文件保存在 protected 目录中,我可以检查当前用户的权限,并且我可以创建适当的审核跟踪。除了...

使用 send_file 我无法查找。这是一个大问题。

一些 stackoverflow 问题涉及如何让 send_file 处理 http-range/byte-range 请求。我评论过的有:

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;博士 不要使用rails send_file 来提供媒体服务。不要试图像 stackoverflow 问题所说的那样做到这一点。相反,使用 nginx 和 X-Accel-Redirect,最终得到一个类似于 you->nginx->rails->nginx->you

的请求管道

我正在考虑采用他的方法,但不知道是否有更好的方法。

我有什么选择?

(另外,您可以假设我正在使用当前版本的 Rails 和 nginx)

最佳答案

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

Nginx secure_link 模块可帮助您通过私有(private)链接直接从磁盘提供文件。无需后端。完整的示例是 here .

关于ruby-on-rails - 如何在没有直接链接的情况下流式传输音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27319054/

相关文章:

java - Java System.arraycopy数组范围

nginx - 入口 nginx - 外部 URL 的代理

php - Nginx 错误 413

ruby-on-rails - activemerchant Paypal 网关配置

ruby-on-rails - 使用 :notice that depends on a URL param 渲染 Action

ruby-on-rails - Capistrano Rails部署后重新启动服务

android - Android AudioRecord短值-我可以考虑声波中负振幅的绝对值吗?

javascript - Rails 模型验证挂起 PUT 请求

javascript - 如何在React中使用audioWorklet.addModule?

php-fpm 子进程在信号 11 上退出