Как я могу отображать прогресс и длину трека в видеопотоке LiquidSoap

Я хочу создать аудио-видеопоток с помощью Liquidsoap. И отображать прогресс и общее время текущей дорожки в видео. Интересно, что является лучшей практикой для достижения этого. В настоящее время я использую следующие методы, в которых:

  • Текущий прогресс определяется функцией source.remaining.
  • Общая длина — это глобальная переменная track_length, которая изменяется в обратном вызове on_track.

Однако существующий метод имеет следующие проблемы:

  • Возвращаемое значение source.remaining не изменяется с постоянной скоростью, как в документе, указанном «оценка оставшегося времени». Может быть 19 минут, а затем внезапно перейти к 19 минутам 20 секунд, а затем перейти к 18 минутам 50 секунд. Однако по мере того, как оставшееся время становится все меньше и меньше, оценка становится более точной.
  • Переменная track_length изменяется после начала текущего трека. Однако функция рисования текста, которая извлекает переменную, всегда получает начальное значение и никогда не изменяется.

Спасибо за вашу помощь!

Вот соответствующая часть моего сценария:

# Define the global variable to store the length of current track
track_length = 0

# Define the on_track callback which updates track_length
def process_metadata(metadata)
    file_name = metadata["filename"]
    track_length = file.duration(file_name)
end

# Define the audio source and hook on_track callback
audio = fallback([sequence([
    single("/etc/liquidsoap/lssj1.mp3")
])])
audio = on_track(process_metadata, audio)

# Define the function which returns the text to render
def get_time()
    "$(cur)/$(total)" % [("cur", string_of(source.remaining(audio))), ("total", string_of(track_length))]
end

# Create the video frame
video = fallback([blank()])
video = video.add_text.sdl(x=0, y=300, size=40, get_time, video)

person Harry Summer    schedule 14.08.2017    source источник
comment
Кто с Liquidsoap ›= 1.4.0 читает это: file.duration теперь называется request.duration.   -  person david    schedule 27.10.2020


Ответы (1)