【问题标题】:SHOUTcast metadata in javascriptjavascript 中的 SHOUTcast 元数据
【发布时间】:2015-10-07 17:51:50
【问题描述】:

我正在为互联网广播电台做前端工作,他们正在广播 SHOUTcast 流。我已经有了音频,我只需要一种简单可靠的方式来在页面上显示元数据。我正在使用 MEAN 堆栈来运行整个事情,所以如果有人有适合该框架的答案,那将是更可取的。

【问题讨论】:

  • 请分享您的代码并解释您已经尝试过的内容。
  • 我有一个 API 可以查找流的元数据。目前不可用,但如果您给我发电子邮件至 brad@audiopump.co,我会在可用时与您联系。在 MEAN 时间(哈,开个玩笑,是吗!?),请参阅这篇文章:stackoverflow.com/a/4914538/362536 它适用于 PHP,但任何语言的概念都是相同的。底线是,您需要您的服务器连接到 SHOUTcast 服务器,获取元数据并将其返回到您的前端。
  • 我尝试了$http.get('http://s2.radioboss.fm:8024/currentsong?sid=1').success(function(currentSong) { console.log(currentSong); $scope.currentSong = currentSong; });,但刚刚返回XMLHttpRequest cannot load http://s2.radioboss.fm:8024/currentsong?sid=1. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9000' is therefore not allowed access.
  • 谢谢,现在我已经在我的服务器上获得了信息,关于如何将数据发送到前端有什么建议吗?我已经可以设置一个 REST api,但是每次轨道发生变化时都必须调用它,并且它必须知道轨道何时发生变化。

标签: javascript angularjs mean-stack shoutcast


【解决方案1】:

下面是我整理的一些东西。它使用来自shoutcast的json-p结果,因此可以在客户端完成而没有任何CORS问题等

function doSomething(obj) {
    document.getElementById('shout').textContent = obj.songtitle;
}

var getShout = (function() {
    var script;

    return function shout(fn, sc, sid) {
        if (script) {
            document.body.removeChild(script);
        }
        script = document.createElement('script');
        script.src = sc + 'stats?json=1&callback=' + fn + '&sid=' + sid + '&rand=' + Math.random();
        document.body.appendChild(script);
    };
}());

document.getElementById('eatme').addEventListener('click', function() {
    getShout('doSomething', 'http://s2.radioboss.fm:8024/', 1)
});
<input id="eatme" type="button" value="press me" />
<div id="shout"></div>

【讨论】:

  • 这似乎是一个很好的解决方案,但是每次切换歌曲时都需要运行它,它似乎无法知道。或者它必须定期进行轮询。无论哪种方式,这似乎都很棘手。
  • 是的,不确定 DNAS 外部的任何解决方案如何在没有轮询的情况下真正知道歌曲何时发生变化
猜你喜欢
  • 1970-01-01
  • 2014-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
  • 2020-10-12
  • 2023-03-19
  • 1970-01-01
相关资源
最近更新 更多