Удаление всех файлов из очереди Liquidsoap для планирования списков воспроизведения

Я использую 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, но также добавляет дополнительный тайм-аут. Как следствие, планирование следующего списка воспроизведения несколько задерживается.

Обратите внимание: я выполняю планирование LiquidSoap через приложение Python, которое помещает в очередь с помощью синхронизированных потоков.

Что бы вы сказали, это рекомендуемый способ решить эту проблему?


person david    schedule 03.02.2020    source источник


Ответы (1)


Я решил эту проблему, введя две очереди файловой системы A и B.

  1. Очередь A заполняется элементами плейлиста и воспроизводится
  2. Через некоторое время Очередь B также заполняется, но еще не воспроизводится.
  3. Как только воспроизведение перешло в Очередь B и началось воспроизведение, у вас будет достаточно времени, чтобы очистить все, что осталось в Очереди A.
person david    schedule 27.05.2020