1

我正在寻找使用 Liquidsoap 安排播放列表的最佳实践方法。我目前的方法会产生大量延迟,因此无法满足无缝播放的要求。

要求

  • 在安排了一个新的播放列表后,它应该删除所有以前安排的播放列表项。
  • 清除以前排队的播放列表项时避免任何延迟。

我目前的实现

  1. 将一堆文件(代表一个播放列表)推送到一个equeue
  2. 此队列开始播放
  3. 当下一个时间段到期时,新的播放列表不能简单地排队,因为它只有在前一个播放列表排队的所有曲目都播放完之后才会开始。因此,我首先使用 Liquidsoap 服务器脚本删除之前播放列表的所有曲目。这个过程很耗时,会延迟第 4 步的及时执行。)
  4. 通过将新文件推送到equeue.

我怎样才能更优雅地做到这一点?是否可以清除没有equeue造成延误的情况?

如果有“更正确”的 Liquidsoap 功能来实现这一点,比如playlist(我可以控制它何时播放?)或request.dynamic(不推荐使用)而不是equeue,请告诉我。

更新:我目前正在使用两个队列:A 和 B。在队列 A 播放前一分钟,我用曲目(播放列表)填充它。当它应该真正播放时,我会调高音量。然后,在队列 B 播放前一分钟,我填充了这个。当实际播放时间到时,我将音量从队列 A > B 转换。理论上这个解决方案会很好,但这里的问题是我不知道队列暂停的方式,直到我调高音量。在队列/播放列表被填满的那一刻,曲目似乎已经开始播放。

4

1 回答 1

1

不阅读完整的脚本很难判断,但我确信暂停队列是不可能的。充其量您可以通过服务器界面删除一个项目:如果它是当前正在播放的项目并且它单独在队列中,那么它将停止该队列。您可能会对Beets 示例感兴趣,这些示例讨论了外部程序如何填充源。

要从播放列表 A 切换到 B,Liquidsoap 的方法是在合适的时候准确填充 B,并且像fallback这样的操作符将进行转换。另请参阅fallback.skip

于 2020-05-03T15:24:03.537 回答