3

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

4

2 回答 2

1

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

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

关于流,我同意@Tigraine
Now,
单曲播放:
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"
        });
    }

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

于 2012-10-04T19:59:16.213 回答