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

