我有一个在 Nginx 上运行的 Ruby On Rails 应用程序,它使用 JW 播放器提供 MP3。我需要能够设置播放列表项的开始时间和持续时间。据我所知,要做到这一点,我需要流式传输 MP3 文件。我该如何设置 Nginx 来执行此操作?
答案1
Nginx 已内置支持通过HttpFlvStream模块。编译/重新编译 Nginx 时,您必须指定模块。
# ./configure --with-http_flv_module ...SOME-OTHER-OPTS...
然后,您可以配置 nginx.conf 来流式传输 FLV 文件,如下所示:
...
http {
...
server {
...
location ~ \.flv$ {
flv;
}
...
}
...
}
现在,由于最初的问题是关于流式传输 MP3 文件,这有什么帮助呢?您可以使用 FFMPEG 将 MP3 转换为 FLV 文件,如下所示:
ffmpeg -y -i /home/song.mp3 -f flv -acodec mp3 -ab 64 -ac 1 /home/song.flv
答案2
据我所知,Nginx 是一个 HTTP 服务器。要流式传输音频,您需要 Icecast 之类的软件:http://www.icecast.org/
流媒体和下载之间的技术差异主要在于客户端和服务器。对于最终用户来说,流媒体意味着他们可能无法将媒体保存在自己的机器上。下载和最终用户可能无法立即开始观看。尽管在实践中,大多数数据可以在第一批数据到达客户端后立即查看。
话虽如此,你确定需要流媒体服务器来使用 JWplayer 吗?你不能直接将它指向一个 URL 并让 JW 获取它吗?在这种情况下,Nginx 可以很好地提供音频。
事实上,我很确定我以前用 Apache 做过这样的事。视频经过一点缓冲后开始播放 - 就像 Youtube 一样。
答案3
你也可以使用 mp4 模块实现这一点
location /mp3/ {
root data;
mp4;
mp4_buffer_size 1m;
mp4_max_buffer_size 5m;
}
你不需要转换为 flv 来播放 mp3