【问题标题】:Online audio stream using ruby on rails使用 ruby​​ on rails 的在线音频流
【发布时间】:2012-09-05 23:00:02
【问题描述】:

我正在尝试编写可以在线流式传输音频(广播电台)的小型网站,但有几个问题: 1. 我是否必须将我所有的音乐文件索引到数据库中,或者我可以从文件系统中随机选择文件并播放它。 2. 我应该什么时候使用 ajax 来加载新歌(在最后完成之后,或者在从服务器获得文件链接的响应之前几秒钟?) 3. 是否值得使用 ajax 或者更好的 make list 来播放它的全部时间然后重新开始?

【问题讨论】:

    标签: ruby-on-rails ruby streaming radio


    【解决方案1】:

    我认为你问错了问题。

    • 您需要考虑如何在浏览器中播放音频(您将使用什么播放器?)。
    • 您不需要 Ruby on Rails 将文件传递给客户端。可以直接从 Web 服务器(Apache 或 Nginx)请求它们
    • Rails 仅用于在播放器旁边渲染网站,然后播放器将播放音频。根据您使用的播放器,您可以通过 javascript 控制它以从服务器请求下一首歌曲,或者只需将静态播放列表写入客户端,然后播放。

    【讨论】:

    • 最重要的是我会使用一些简单的 js 播放器 + html5 音频 api。但是我不确定我是否正确理解了您关于使用 Web 服务器请求文件的信息,您能否解释更多详细信息,或者指出我可以在哪里阅读有关此内容的信息。我找到了一些关于如何使用 php 制作广播流的信息,并且有很多代码对视图没有响应。我还想使用 ruby​​ 标签 gem 显示当前歌曲名称,它可以从文件中读取 id3 标签
    • 嗯.. Ruby on Rails 是一个专注于向客户端呈现 HTML 的 Web 框架。 Web 服务器的主要目的(如 Apache 或 NginX)是将文件从服务器的文件系统提供给客户端。因此,如果您只是将 mp3 文件放在 Rails 应用程序的公共文件夹中,则可以从客户端访问它,而无需您做任何事情..
    • 好吧,我想我不会那样做,因为我需要巨大的托管空间。是否可以使用一些基于云的系统,如 dropbox 或 g-drive\skydrive 来托管音频文件,然后使用 RoR 使用它们?
    • 如何存储数据完全取决于您。您甚至可以继续使用 SoundCloud 来托管数据,并且只将他们的音频播放器嵌入到您的网站中。Rails 仅服务于充当目录以访问音频源的网站。您将它存储在哪里取决于您...但是大量音频文件的虚拟主机并不便宜..免费服务只能带您到此为止..
    【解决方案2】:

    关于流媒体我同意@Tigraine
    现在,
    单曲播放:
    1 如果您想播放一首歌曲,那么在您的 ajax 调用操作中,在 json 响应中返回一个键值对,其中包含所请求歌曲的音频 URL。
    对于播放列表:
    2. 您应该返回一个数组,其中包含与添加到播放列表中相同排列的音频 URL。
    然后在你的java脚本中声明变量
    var current_song
    var total_song
    在 js 音频播放器中,我们通常有方法检测歌曲何时完成,然后在歌曲完成时,您可以将歌曲计数器递增为
    current_song+=0

    当计数器结束时将其重置为 1:
    示例代码是:
    在这里,我使用的是 Jplayer,您可以使用任何其他播放器,它是最好且完全可定制的播放器之一。

     var current_song = 0;
        var total_songs;
        var song_id_array;
    
            $.ajax({
                url:"<%=url_for :controller => 'cont_x',:action => 'song_in_playlist'%>",
                data:'playlist_id=' + encodeURIComponent(playlist_id),
                cache:false,
                success:function (data) {
                    song_id_array = data.array; //data.array variable contain's the audio URL's array of songs inside selected playlist which is returned by the action //
                    total_songs = song_id_array.length;
                }
            })
            current_song = 0;
            play_right_song(current_song);
        }
    
        function play_right_song(current_song) {
            $("#jquery_jplayer_1").jPlayer("destroy");
            var audio_url_inside = song_id_array[current_song];
            $('#jquery_jplayer_1').jPlayer({
                ready:function (event) {
                    $(this).jPlayer("setMedia", {
                        mp3:audio_url_inside
                    }).jPlayer("play");
                },
                ended:function () { // The $.jPlayer.event.ended event
                    current_song += 1;
                    if (current_song >= total_songs) {
                        current_song = 0;
                    }
                    play_right_song(current_song);
                },
                swfPath:"<%= asset_path('Jplayer.swf')%>",
                supplied:"mp3"
            });
        }
    

    如果您想处理播放列表中的下一首和上一首歌曲,只需询问代码即可。我会更新答案。

    【讨论】:

    • 感谢您的回答。但我知道我需要流媒体服务器才能像在广播中一样播放音乐。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 2012-11-06
    • 2016-11-29
    • 1970-01-01
    • 2011-02-15
    • 2011-10-26
    相关资源
    最近更新 更多