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

Liquidsoap Fallback事件处理器开发:触发应急播放列表时执行脚本

实现Liquidsoap Fallback切换至紧急播放列表时触发脚本的方案

我之前也遇到过完全一样的需求——要在每次fallback切换到紧急播放列表时自动执行系统脚本,而不是只在启动时跑一次。下面给你两个经过验证的可行方案,都能达到类似on_blank的触发效果:

方案一:给紧急播放列表源添加on_start回调

这个方案的核心是给你的emergency_playlist包装一层,让它每次开始播放内容时自动执行脚本。好处是逻辑简单,只要紧急源开始输出音频就会触发,不管是fallback切换过来还是其他情况。

示例代码:

# 定义一个包装后的紧急源,每次启动播放时执行脚本
def create_emergency_source() =
  # 基础的紧急播放列表
  base_emergency = playlist("/path/to/your/emergency_playlist")
  
  # 定义触发脚本的回调函数
  def trigger_emergency_script(_) =
    # 这里替换成你的系统脚本路径,注意加&让脚本后台运行,避免阻塞Liquidsoap
    system("/path/to/your/emergency_handler.sh &")
    ()
  end
  
  # 给紧急源绑定on_start事件
  source.on_start(base_emergency, trigger_emergency_script)
end

# 构建你的fallback流
main_source = # 这里是你的主播放源(比如live input、普通playlist等)
radio = fallback(track_sensitive=false, [main_source, create_emergency_source()])

方案二:利用fallback的transition函数检测切换

如果你只想在fallback切换动作发生时触发脚本(而不是紧急源任何播放场景),可以用fallback的transition参数来监听切换事件,精准判断是否切换到了紧急源。

示例代码:

# 给紧急源设置唯一ID,方便在transition中识别
emergency_source = playlist(id="emergency_playlist", "/path/to/your/emergency_playlist")

# 自定义transition函数,检测切换到紧急源时执行脚本
def emergency_transition(from_source, to_source) =
  # 检查是否切换到了我们标记的紧急源
  if to_source.id == "emergency_playlist" then
    system("/path/to/your/emergency_handler.sh &")
  end
  # 返回默认的切换逻辑(直接切换,无过渡效果)
  transition.return()
end

# 构建带transition的fallback流
main_source = # 你的主播放源
radio = fallback(
  transition=emergency_transition,
  track_sensitive=false,
  [main_source, emergency_source]
)

注意事项

  • 确保Liquidsoap进程有执行目标脚本的权限,必要时用chmod +x给脚本加执行权限,或者调整脚本所属用户组。
  • 脚本执行如果耗时较长,一定要加&让它后台运行,否则会阻塞Liquidsoap的音频输出,导致播放卡顿。
  • 如果需要传递参数给脚本,可以在system命令里拼接,比如system("/path/to/script.sh param1 param2 &")。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:57:41