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
相关产品推荐
相关产品推荐

