我正在使用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调度,该应用程序使用定时线程推送到队列。
您认为解决此问题的推荐方法是什么?
我通过引入两个文件系统队列 A 和 B 来解决这个问题。
- 队列 A填充了播放列表项并播放
- 一段时间后,队列 B也会填充,但尚未播放。
- 一旦播放过渡到队列 B并开始播放,就有足够的时间来清除队列 A中剩余的任何内容