我有一个在 vps 上运行的 icecast2 服务器,其挂载点连接到 liquidsoap 源。 一切都很好,我可以从浏览器访问我的流,地址为:
http://IP:PORT/mount
,我可以从 /status.xsl 中看到 Currenty Playing 歌曲的名称和艺术家。
我的目标是在 javascript 应用程序中获取流音频和元数据。
我试图简单地将我的流 url 放在
所以我需要其他解决方案...
我发现也许 icecast-metadata-player 是我需要的。但是当我尝试基本设置时:
const player = new IcecastMetadataPlayer("http://IP:PORT/mount", {
onMetadata: (metadata) => { console.log(metadata); },
metadataTypes: ["ogg", "icy"],
});
我收到以下错误:
GET http://IP:PORT/mount net::ERR_EMPTY_RESPONSE
对于 javascript 部分,我尝试了一些示例流,没有问题,所以我认为错误不是来自 icecast-metadata-player。
我在 8000 端口的 vps 上安装了 ufw,这是用于打开 icecast 服务器的端口。
所以我可能在 icecast 的服务器配置上遗漏了一些允许 icecast-metadata-player 访问它的东西。
这是配置:
<icecast>
<location>Earth</location>
<admin>icemaster@localhost</admin>
<limits>
<clients>100</clients>
<sources>10</sources>
<queue-size>524288</queue-size>
<client-timeout>30</client-timeout>
<header-timeout>15</header-timeout>
<source-timeout>10</source-timeout>
<burst-on-connect>1</burst-on-connect>
<burst-size>65535</burst-size>
</limits>
<authentication>
<source-password>hackme</source-password>
<relay-password>hackme</relay-password>
<admin-user>admin</admin-user>
<admin-password>hackme</admin-password>
</authentication>
<hostname>IP ADRESS</hostname>
<listen-socket>
<port>8000</port>
</listen-socket>
<http-headers>
<header name="Access-Control-Allow-Origin" value="*" />
</http-headers>
<!-- Normal mounts -->
<mount type="normal">
<mount-name>/test.ogg</mount-name>
<stream-name>radio test</stream-name>
<password>pass</password>
<public>1</public>
</mount>
<fileserve>1</fileserve>
<paths>
<basedir>/usr/share/icecast2</basedir>
<logdir>/var/log/icecast2</logdir>
<webroot>/usr/share/icecast2/web</webroot>
<adminroot>/usr/share/icecast2/admin</adminroot>
<alias source="/" destination="/status.xsl"/>
</paths>
<logging>
<accesslog>access.log</accesslog>
<errorlog>error.log</errorlog>
<loglevel>3</loglevel> <!-- 4 Debug, 3 Info, 2 Warn, 1 Error -->
<logsize>10000</logsize> <!-- Max size of a logfile -->
</logging>
<security>
<chroot>0</chroot>
</security>
</icecast>