所以我有一个Liquidsap的实例,我正在使用它流式传输到Icecast服务器。
我想录制任何自动进行的直播,我现在正在做,而且效果很好。
我想做的是在创建mp3档案时使用现场表演的元数据(特别是歌曲名称)。
#!/usr/local/bin/liquidsoap
set("log.file",true)
set("log.file.path","/var/log/liquidsoap/radiostation.log")
set("log.stdout",true)
set("log.level",3)
#-------------------------------------
set("harbor.bind_addr","0.0.0.0")
#-------------------------------------
backup_playlist = playlist("/home/radio/playlists/playlist.pls",conservative=true,reload_mode="watch")
output.dummy(fallible=true,backup_playlist)
#-------------------------------------
live_dj = input.harbor(id="live",port=9000,password="XXX", "live")
date = '%m-%d-%Y'
time = '%H:%M:%S'
output.file(%mp3, "/var/www/recorded-shows/#{Title} - Recorded On #{date} At #{time}.mp3", live_dj, fallible=true)
#time_stamp = '%m-%d-%Y, %H:%M:%S'
#output.file(%mp3, "/var/www/recorded-shows/live_dj_#{time_stamp}.mp3", live_dj, fallible=true)
#-------------------------------------
on_fail = single("/home/radio/fallback/Enei -The Moment Feat DRS.mp3")
#-------------------------------------
source = fallback(track_sensitive=false,
[live_dj, backup_playlist, on_fail])
# We output the stream to icecast
output.icecast(%mp3,id="icecast",
mount="myradio.mp3",
host="localhost", password="XXX",
icy_metadata="true",description="cool radio",
url="http://myradio.fm",
source)
我已经在我希望我的歌曲标题出现的地方添加了#{title},遗憾的是,尽管我无法得到这个填充。
我的Dj使用BUTT和节目标题是作为连接的一部分连接的,所以数据应该在录制前可用。
非常感谢您的任何建议!
这远不像看上去那么容易。
title
元数据是动态的,因此在脚本初始化时不能作为变量使用- 初始化脚本时编译
output.file
的文件名参数
解决方案包括:
- 定义变量引用
title
以填充实时元数据 - 输出到临时文件
- 在关闭时使用
on_close
参数和output.file
重命名文件(在这种情况下,我们只需在标题前加上前缀)
这将给出以下代码(在Linux盒子上,在Windows上将mv
更改为ren
):
date = '%m-%d-%Y'
time = '%H:%M:%S'
# Title is a reference
title = ref ""
# Populate with metadata
def get_title(m)
title := m['title']
end
live_dj = on_metadata(get_title,live_dj)
# Rename file on close
def on_close(filename)
# Generate new file name
new_filename = "#{path.dirname(filename)}/#{!title} - #{basename(filename)}"
# Rename file
system("mv '#{filename}' '#{new_filename}'")
end
output.file(on_close=on_close, %mp3, "/var/www/recorded-shows/Recorded On #{date} At #{time}.mp3", live_dj, fallible=true)
我测试了一个类似的场景,它运行得很好。只需注意,每当DJ断开连接或更新标题时,这将创建一个新文件。还要记住,时间戳将由output.file
解决。
这是基于Liquidsap开发的以下示例:https://github.com/savonet/liquidsoap/issues/661#issuecomment-439935854)