首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用ruby on rails的在线音频流

使用ruby on rails的在线音频流
EN

Stack Overflow用户
提问于 2012-09-13 05:24:07
回答 2查看 4K关注 0票数 2

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-13 05:36:00

我想你问错问题了。

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

Stack Overflow用户

发布于 2012-10-05 03:59:16

关于我和@Tigraine的流媒体

现在,

单曲播放:

1如果您想播放一首单独的歌曲,那么在ajax的action调用中,在json response中返回一个键值对,其中包含所请求歌曲的音频URL。

播放列表:

  1. 您应该返回一个数组,其中包含的音频地址的顺序与它们添加到播放列表中的顺序相同。

然后在java脚本中声明变量

var current_song

var total_song

在js音频播放器中,我们通常有一些方法来检测歌曲何时完成,然后在歌曲完成时,您可以将歌曲计数器递增为

current_song+=0

当计数器到达终点时,将其重置为1:

示例代码如下:

这里我使用的是Jplayer,你可以使用任何其他的播放器,这是最好的和完全可定制的播放器之一。

代码语言:javascript
运行
复制
 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"
        });
    }

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12396391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档