我无法在网上找到更好的答案,即使是液体肥皂的文件也没有用。我想要发生的是获取当前的歌曲标题和艺术家在我的流媒体服务器(icecast)中播放。我在一些论坛上发现他们能够做到,但他们没有解释如何,这里是他们使用的Liquidsoap脚本:
def apply_metadata(m) =
title = m["title"]
artist = m["artist"]
album = m["album"]
[("artist","#{artist}"),("title","#{album} - #{title}")]
end
centovacast.callback_autodj := fun(s) -> map_metadata(apply_metadata,s)
我相信这个剧本也只适用于centova和autodj。虽然我不使用这些技术(我使用的是Ubuntu 16.04,Icecast2,Liquisoap,PHP,HTML5 / CSS), 这可以使用我目前使用的工具吗?
答案 0 :(得分:0)
我不确定你为什么要将源客户端拖入此内容。
发送到Icecast挂载点的正确流将包含当前播放音频的元数据。
有人指出elsewhere。自2.4.1以来的Icecast提供了正确的JSON元数据导出。
从网站内部查询JSON是一个非常解决的问题,并被认为是倾向于读者的练习。
答案 1 :(得分:0)
为什么不直接在icecast上抓住这个?
PHP:
function get_icecast_info($server_ip, $server_port, $admin_user, $admin_password) {
$index = @file_get_contents("http://".$admin_user.":".$admin_password."@".$server_ip.":".$server_port."/admin/stats.xml");
if($index) {
$xml = new DOMDocument(); if(!$xml->loadXML($index)) return false; $arr = array(); $listItem = $xml->getElementsByTagName("source");
foreach($listItem as $element) {
if($element->childNodes->length) {
foreach($element->childNodes as $i){ $arr[$element->getAttribute("mount")][$i->nodeName] = $i->nodeValue; }
}
}
return $arr;
} return false;
}
这是输出(数组):
$arr = get_icecast_info($ice_host, $ice_aport, $ice_user, $ice_pass);
答案 2 :(得分:0)