【问题标题】:Liquidsoap Recording Over All Files In Output FolderLiquidsoap 记录输出文件夹中的所有文件
【发布时间】:2015-10-31 17:15:51
【问题描述】:

所以我有一个 Liquidsoap 实例,在端口 8080 上有一个港口输入。

我希望每当有人连接到 /live 时,流就会被记录并保存在服务器上。

这很好用,但是,例如,如果我正在录制,然后断开连接并允许播放列表启动,当我再次尝试流式传输时,它会创建一个新文件,但会开始写入新文件和上一个文件录音。

基本上写完了第一个文件。唯一不会发生这种情况的方法是,如果liquidsoap 在两次广播之间重新启动。

这是我的 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)

【问题讨论】:

    标签: linux icecast internet-radio liquidsoap


    【解决方案1】:

    没有必要显式写入reopen_on_metadata=false,因为reopen_on_metadata 默认为false

    要在短暂断开连接后赶上录音,请设置append=true。你至少需要这个。

    最根本的问题是,要使用output.file 创建不同的文件,您需要让 Liquidsoap 重新打开文件:第二天,它是另一个文件。当前,当您重新启动liquidsoap 时会发生重新打开,但显然这不是最佳选择。

    相反,将reopen_when = {00h00} 添加到output.file - 每天午夜都是如此。这很简单,如果live 关闭,则不会创建文件(因为在这种情况下它根本不会尝试写入)。如果您可能会在午夜进行直播,请选择其他时间。

    【讨论】:

      【解决方案2】:

      如果您将参数append=true 添加到output.file,则新的音频数据将附加到现有文件而不是覆盖它。

      您可以将其与文件名中的时间戳结合起来创建每日/每小时转储。

      阅读output.file 的文档了解更多参数:Liquidsoap 1.4.1 - API Reference: output.file

      【讨论】:

        【解决方案3】:

        刚刚问了自己同样的问题,配置了类似的解决方案。 就我而言,我选择了简单(唯一?)的方式。在文件名中添加时间,以便在同一天多个实时会话的情况下不会发生冲突 (20170323143928)

        timestamp = '%Y%m%d%H%M%S'
        

        【讨论】:

          猜你喜欢
          • 2021-09-19
          • 1970-01-01
          • 2016-11-11
          • 1970-01-01
          • 2020-07-02
          • 2011-10-30
          • 2019-09-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多