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

Liquidsoap切换期间无法打印源ID问题求助

Liquidsoap脚本切换后无法打印源ID的解决方法

问题原因

你在transition函数中调用source.id(old)无法获取预期的源ID,是因为原始带ID的源经过音频处理算子(如gate、strip_blank)包装后,生成了新的源对象,而这些新对象默认未继承或设置ID。source.id()只能获取当前源对象的ID,若未显式设置,会返回系统自动生成的随机ID或空值。

解决方案

1. 给所有处理后的源显式设置ID

对每一个经过处理(如gate、strip_blank)的源,使用source.set_id()方法为其设置与原始源一致的ID,确保source.id()能正确识别:

修改脚本中相关源的定义部分:

primary_source = input.http("http://icecast2:8382/primary.mp3")
primary_source = strip_blank(max_blank=120., primary_source)
primary_source = source.set_id(primary_source, "primary_source")

secondary_source = input.http("http://icecast2:8382/secondary.mp3")
secondary_source = strip_blank(max_blank=120., secondary_source)
secondary_source = source.set_id(secondary_source, "secondary_source")

studio3_source = input.http(id="studio3_source","http://listen.com.au:8382/studio3.mp3")
studio3_source = gate(studio3_source,threshold = t1,attack = 0.015)
studio3_source = source.set_id(studio3_source, "studio3_source")

alnawawi_source = input.http(id="alnawawi_source","http://listen.com.au:8382/alnawawi.mp3")
alnawawi_source = gate(alnawawi_source,threshold = t2,attack = 0.015)
alnawawi_source = source.set_id(alnawawi_source, "alnawawi_source")

live_remote=input.harbor(id="live_remote","live_remote",port=8383,password="test",icy=true, buffer=5.0, max=10.0)
live_remote=strip_blank(max_blank=120., live_remote)
live_remote = source.set_id(live_remote, "live_remote")

wavestation=input.harbor(id="wavestation","wavestation",port=8383,password="test",icy=true, buffer=5.0, max=10.0)
wavestation=strip_blank(max_blank=120., wavestation)
wavestation = source.set_id(wavestation, "wavestation")

2. 优化transition函数(可选)

如果需要更清晰的日志,可以在打印时增加描述信息,避免混淆:

def transition(old,new) =
    print("切换离开源ID: " ^ source.id(old))
    print("切换进入源ID: " ^ source.id(new))
    print("++++++++++++++++++++++++++")
    system("python /home/liquidsoap/config/udp.py")
    sequence(merge=true,[ 
        fade.final(duration=20.,old),
        fade.initial(duration=10.,new)
    ])
end

3. 修正switch的transitions参数

你的switch定义中transitions=[transition,transition],但实际有3个case((b,studio3_source)、(a,alnawawi_source)、({true},radio)),建议改为单个函数适配所有切换,避免数量不匹配导致的潜在问题:

radio = switch(track_sensitive=false, transitions=transition, [(b,studio3_source), (a,alnawawi_source), ({true},radio)])

验证方法

启动Liquidsoap后,触发源切换操作,查看控制台输出,应该能正常打印出对应源的ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:42:14