AzuraCast 使用 Icecast(目前是 Icecast 2.4.0-kh10-ac4)进行广播直播。
Icecast 可以选择在新听众连接时将媒体文件添加到直播流中。
这就是Icecast 文档对<intro>
选项的看法(我的粗体字):
一个可选值,它将指定文件这些内容将在新侦听器连接时但在发送普通流之前发送给它们。确保指定文件的格式与流格式匹配。指定的文件在打开之前会附加到 webroot 。
相同格式
为了绝对确保介绍文件与流具有完全相同的编码格式,我使用了流的简短转储 ( mplayer -dumpstream <mountpoint_url>
) 用作测试的介绍文件。
直接编辑icecast.xml?不。
现在,站点的 Icecast 配置文件通常位于/var/azuracast/stations/<station_slug>/config/icecast.xml
运行 AzuraCast 的服务器上(使用默认设置)。
我遇到的第一个问题是AzuraCasticecast.xml
每次启动或重启Icecast都会覆盖文件,所以不能直接编辑。
从 AzuraCast 中更改 Icecast 设置
幸运的是,我通过在自定义配置字段(位于Edit Profile > Broadcasting下)中输入 JSON 来覆盖(部分)Icecast 设置。这是一个例子:
{
"location" : "Overrides location",
"mount" : [{
"intro" : "/intro-128.mp3"
},{
"intro" : "/intro-64.aac"
}],
"paths" : {
"webroot" : "/usr/local/share/icecast/web"
},
"directory" : {
"yp-url-timeout" : "15",
"yp-url" : "http://dir.xiph.org/cgi-bin/yp-cgi"
}
}
当 Icecast 重新启动时,这成功地转换为 XML 内部icecast.xml
(只保留相关标签):
<icecast>
<location>Overrides location</location>
...
<mount type="normal">
<mount-name>/radio.mp3</mount-name>
...
<intro>/intro-128.mp3</intro>
</mount>
<mount type="normal">
<mount-name>/radio.aac</mount-name>
...
<intro>/intro-64.aac</intro>
</mount>
<paths>
<basedir>/usr/local/share/icecast</basedir>
<webroot>/usr/local/share/icecast/web</webroot>
...
</paths>
...
<directory>
<yp-url-timeout>15</yp-url-timeout>
<yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
</directory>
</icecast>
但是不,它不会播放...
但我无法弄清楚使其工作的组合<intro>
和设置。<webroot>
嘿!Webroot 不存在!
奇怪的事情:<webroot>
服务器上甚至不存在默认值。我尝试创建路径并将介绍文件放在那里,但它不会播放(即使在重新启动 Icecast 之后),也不会在您http://<host:port>/intro-128.mp3
直接请求时显示(您会期望它位于 Web 根目录中)。
当我将值更改<webroot>
为另一个目录时,Icecast Web 前端停止工作(尽管流仍然有效),并且直接请求介绍文件也不起作用。
这让我怀疑 AzuraCast 以某种方式将 Icecast 的请求“重定向”到文件系统。
码头工人?进还是出?
我的 AzuraCast 在 VPS 内的 Docker 安装中运行。当然,所有这些路径和文件都驻留在Docker 卷中。但可以肯定的是,我也尝试直接在主机服务器上创建路径,但到目前为止没有成功。
(是的,更改已生效。)
我确认更改icecast.xml
已生效,因为我可以在 Icecast 上看到被覆盖的位置,并且流已在dir.xiph.org上注册。