所以我有一个Liquidsoap实例,在端口8080上有一个港口输入。
我希望发生的事情是,只要有人连接到/ live,就会记录流并将其保存在服务器上。
这很好,但是,如果我正在录制,然后断开连接并允许播放列表启动,当我再次尝试流时,它会创建一个新文件,但开始写入新文件和之前的文件记录。
它基本上是在写第一个文件。唯一不会发生这种情况的方法是,如果liquidsoap在2个广播之间重新启动。
以下是我的liq文件的副本:
#!/usr/bin/liquidsoap
# Don't create a pidfile
#set("init.daemon.pidfile",false)
# Create Log File
set("log.file.path","/tmp/ls-log.log")
set("log.file.perms",755)
set("log.unix_timestamps",true)
# DJ or Metadata IP Address
set("harbor.bind_addr","0.0.0.0")
# Port / Pass for Live DJs
live = input.harbor(id="live",port=8080,password="xxxxxx", "live")
# Find /home/music/ -type f -name "*.mp3" > /etc/liquidsoap/music.m3u
# Path to playlist file which contains a list of local mp3's (/home/user/mp3/song.mp3)
playlist = playlist("./home/taskone/stream/playlists/dubstep/playlist.txt")
# Path to backup track if other streams fail
backup = single("./home/taskone/stream/backups/dubstep/Task One - Studio Sessions.mp3")
# Do not monitor for radio silence and also specify the expected play order
radio = fallback(track_sensitive=false,[live, playlist, backup])
# Function to manually change song title
title = insert_metadata(radio)
insert = fst(title)
radio = snd(title)
def set_meta(~protocol,~data,~headers,uri) =
title = url.split(uri)
meta = metadata.export(snd(title))
show_title = meta["title"]
ret = if meta != [] then insert(meta) "Title Updated - #{show_title}" else "No metadata to add!" end
http_response(protocol=protocol,code=200,headers=[("Content-Type","text/html")],data="<html><body><b>#{ret}</b></body></html>") end
# Port to register metadata updates via http
harbor.http.register(port=8080,method="GET","/setmeta",set_meta)
# dump live_dj recordings to a file
timestamp = '%d-%m-%Y'
show_title = 'XXXXXXX'
output.file(%mp3(bitrate=320, id3v2=true), reopen_on_metadata=false, "/var/www/html/recorded_shows/#{show_title} Recorded On #{timestamp}.mp3", live, fallible=true)
# Output to an Icecast Server
output.icecast(
%mp3(bitrate=192),
mount="/stream",
host="localhost", port=8000, password="XXXXXXXX",
radio)
答案 0 :(得分:1)
刚刚问自己同样的问题,配置类似的解决方案。 在我的情况下,我选择了简单(只有?)的方式。添加文件名的时间,以便在同一天的多个实时会话中没有冲突(20170323143928)
timestamp = '%Y%m%d%H%M%S'
答案 1 :(得分:0)
如果将参数batches[commitCounter] = db.batch();
添加到append=true
,则新的音频数据将附加到现有文件中,而不是覆盖它。
您可以将其与文件名中的时间戳结合使用以创建每日/每小时的转储。
阅读output.file
的文档以获取更多参数:Liquidsoap 1.4.1 - API Reference: output.file
答案 2 :(得分:0)
因为reopen_on_metadata=false
默认为reopen_on_metadata
,所以不必显式地编写false
。
要在短暂断开连接后继续录制,请设置append=true
。您至少需要这个。
底部的问题是,要使用output.file
创建不同的文件,您需要LiquidSoap重新打开文件:第二天,它是另一个文件。当前,重新启动是重新启动Liquidsoap时发生的事情,但显然这不是最佳选择。
相反,将reopen_when = {00h00}
添加到output.file
-每天午夜都是如此。很简单,如果live
处于关闭状态,则不会创建文件(因为在这种情况下,它根本不会尝试写入文件)。如果您可能在午夜流媒体,请选择其他时间。