Как загрузить только одну дорожку за раз в Liquidsoap

У меня есть база данных MySQL, в которой хранятся все мои треки и связанная с ними информация. Одна из таблиц в базе данных — это таблица очереди, из которой я извлекаю дорожку для воспроизведения Liquidsoap. Я предоставляю эти треки для воспроизведения с Liquidsoap, используя request.dynamic.list.

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 для загрузки новой дорожки из очереди. таблица в базе?


person user5919866    schedule 06.08.2020    source источник


Ответы (1)


Liquidsoap всегда заранее подготавливает следующие элементы потока, и это основной принцип его планировщика. Это позволяет начать загрузку, например, перед воспроизведением загруженной дорожки. Пока вы используете request.dynamic.list, вызываемый скрипт должен позаботиться об этом. Другими словами, вы не можете полагаться только на часы, чтобы оценить трек, который нужно вернуть. Насколько я понимаю ваш вариант использования, вы можете предпочесть использовать источник request.queue, и ваш скрипт будет вовремя отправлять каждый запрос через сервер telnet.

person Martin    schedule 16.01.2021
comment
На самом деле, я решил свою проблему несколько месяцев назад, создав источники и используя request.equeue с отправкой источника. - person user5919866; 27.01.2021