0

我有一个 MySQL 数据库,用于存储我的所有曲目及其相关信息。数据库中的一个表是一个队列表,我从中拉出一个曲目供 Liquidsoap 播放。我正在使用 request.dynamic.list 提供这些曲目以与 Liquidsoap 一起播放。

def get_track() = 
    # Get the first line of my external process
    result = list.hd(default="", get_process_lines(scripts ^ "get_track.py"))
    print(result)
    # Create and return a request using this result
    [request.create(result)]
end

# Create the source
sourcetrack = request.dynamic.list(id="play_queue", conservative=false, get_track)

get_track.py 脚本从数据库中的队列表中检索记录。

我注意到 Liquidsoap 在启动时会抓取两条轨道。两个被“接受”,一个被“准备好”。

有没有办法让 Liquidsoap 一次只接受一首曲目,并且只有在接近当前播放曲目的结尾时才等待接受下一首曲目?

我还安排了添加到数据库中队列表的计划程序,当这种情况发生时,所有轨道都从数据库中的队列表中清除,然后程序被添加到队列表中。

由于 Liquidsoap 在播放“准备好的”曲目时似乎已经在其队列中加载了一首曲目,有没有办法删除该曲目,以便 Liquidsoap 不会播放该曲目,而是再次调用 get_track.py 脚本来加载新曲目从数据库中的队列表?

4

1 回答 1

0

Liquidsoap 总是提前准备流的下一个项目,这是它的调度器的一个基本原则。例如,这允许在播放下载的曲目之前开始下载。只要您在使用request.dynamic.list,被调用的脚本就必须处理好这一点。换句话说,您不能仅依靠时钟时间来评估返回的轨道。据我了解您的用例,您可能更喜欢使用request.queue源,并让您的脚本通过 telnet 服务器按时推送每个请求。

于 2021-01-16T18:14:10.807 回答