Я хочу создать аудио-видеопоток с помощью 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)
file.duration
теперь называетсяrequest.duration
. - person david   schedule 27.10.2020