1

我正在使用一个equeue通过将曲目推入播放列表来播放播放列表。假设一个小时后,一个新的播放列表(一组文件)被推送到队列中。不幸的是,这些曲目没有开始播放,因为它们在先前排队的文件之后排队。

以下脚本从队列中删除文件:

input_fs = request.equeue(id="fs")

def clear_items(s) =
    ret = server.execute("fs.primary_queue")
    ret = list.hd(ret)
    if ret == "" then
        log("Queue cleared.")
        (-1.)
    else
        log("There are still items in the queue, trying skip ...")
        source.skip(s)
        (0.1)
    end
end

def clear_queue(s) =
    add_timeout(fast=false, 0.5, {clear_items(s)})
end

server.register(namespace="fs",
    description="Clear the all items of the filesystem queue.",
    usage="clear",
    "clear",
    fun (s) -> begin clear_queue(input_fs) "Done." end)

它在通过 Telnet 调用时工作,但也会增加一些额外的超时。结果,对下一个播放列表的调度有所延迟。

请注意,我正在通过 Python 应用程序执行 LiquidSoap 调度,该应用程序使用定时线程推送到队列。

你会说什么是解决这个问题的推荐方法?

4

1 回答 1

0

我通过引入两个文件系统队列 A 和 B 解决了这个问题。

  1. 队列 A填充了播放列表项并播放
  2. 一段时间后,队列 B也已填充,但尚未播放。
  3. 一旦比赛过渡到队列 B并开始播放,就有足够的时间来清除队列 A中剩下的任何东西
于 2020-05-27T10:52:58.147 回答