You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让BUTT接管Liquid Soap播放列表实现直播覆盖

解决方案

核心问题

你遇到的冲突是因为同一个Icecast挂载点(如/stream)同一时间只能被一个源占用,所以Liquid Soap占用/stream时,BUTT无法再连接同一个挂载点。Icecast的max-sources是全局允许的源总数,并非单个挂载点的允许数量。

步骤1:调整Icecast配置

打开Icecast配置文件(通常路径为/etc/icecast2/icecast.xml),完成以下设置:

  1. 确保全局max-sources至少为2:
<limits>
  <max-sources>2</max-sources>
</limits>
  1. 添加两个挂载点配置,分别分配给BUTT和Liquid Soap:
<mount>
  <mount-name>/live</mount-name>
  <source-password>12345678</source-password> <!-- 和你的Icecast源密码保持一致 -->
  <max-listeners>100</max-listeners>
</mount>
<mount>
  <mount-name>/stream</mount-name>
  <source-password>12345678</source-password>
  <max-listeners>100</max-listeners>
</mount>

修改后重启Icecast服务:

sudo systemctl restart icecast2

步骤2:修改Liquid Soap配置

改用Liquid Soap的fallback机制,优先播放BUTT的直播内容,直播断开时自动切回播放列表。替换原配置为:

# 定义BUTT的直播源(BUTT将连接到Icecast的/live挂载点)
live_input = input.http("http://localhost:8000/live")

# 定义本地播放列表源,mksafe确保无内容时播放静音
playlist_input = mksafe(playlist("/var/www/html/mp3/playlist.m3u"))

# 优先级:直播源可用时优先使用,否则切换到播放列表
# track_sensitive=false 表示立即切换,无需等待当前曲目结束
radio = fallback(track_sensitive=false, [live_input, playlist_input])

# 输出到Icecast的/stream挂载点
output.icecast(%vorbis,
  host = "localhost",
  port = 8000,
  password = "12345678",
  mount = "/stream",
  name = "My Stream",
  description = "Playing live content or cool music",
  genre = "Various",
  radio
)

重启Liquid Soap服务:

sudo systemctl restart liquidsoap

步骤3:配置BUTT

在BUTT的设置中,将挂载点修改为/live,其他参数(IP、端口、密码)保持和Icecast一致,然后启动直播。此时:

  • 当BUTT直播时,Liquid Soap会自动拉取/live的内容并通过/stream输出
  • 当BUTT断开后,Liquid Soap自动切回播放列表

你之前fallback配置失败的原因

大概率是以下情况导致:

  • 未正确定义直播源(比如引用了不存在的输入地址)
  • track_sensitive默认设为true,需要等待当前曲目结束才切换,导致看起来未生效
  • 仍将直播和播放列表分配到同一个Icecast挂载点,源冲突问题未解决

内容的提问来源于stack exchange,提问作者Daniel Torridon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:07:29