在轨道上使用ruby的在线音频流

时间:2012-09-12 21:24:07

标签: ruby-on-rails ruby streaming radio

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

2 个答案:

答案 0 :(得分:1)

我认为你问的是错误的问题。

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

答案 1 :(得分:1)

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

当计数器到达结束时将其重置为一个:
示例代码是:
在这里,我使用的是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"
        });
    }

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