Проблемы с синхронизацией запуска светодиодной процедуры с началом воспроизведения видео VLC с использованием Python libPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Проблемы с синхронизацией запуска светодиодной процедуры с началом воспроизведения видео VLC с использованием Python lib

Сообщение Anonymous »

Я пытаюсь синхронизировать мигание светодиодов с воспроизводимым видео, используя Raspberry Pi 3B+ и оболочки Python для libVLC. Например, я хочу, чтобы светодиод мигал красным ровно через 2000 мс воспроизведения видео и зеленым через 5500 мс и т. д.
Я могу получить время между миганиями светодиода достаточно точно в Python (чтобы в течение нескольких мс), но я не могу синхронизировать начало воспроизведения видео с началом синхронизации светодиодов. Я уже попробовал несколько вещей
1. Инициализируйте видеоплеер, загрузите носитель, задержитесь в сценарии на несколько секунд, чтобы плеер запустился и загрузил носитель. Вызовите play() и немедленно запустите тайминг светодиодов.
Воспроизведение всегда задерживается после вызова воспроизведения на 100+ мс, похоже, из-за этого светодиоды срабатывают раньше, чем хотелось< /p>
2. Запрос State.Playing с использованием player.get_state() через некоторое время True цикл и запуск светодиодов сразу после обнаружения
Кажется изменение состояния задерживаться на 100+ мс, несмотря на то, что get_state() вызывается в цикле занятости, это приводит к позднему запуску процедуры LED
3. Добавление нескольких секунд черного экрана в начало видео, вызов player.get_time() примерно через секунду и сон на время до «начала» реальной части видео
get_time(), кажется, не дает точного времени, кажется, что он обновляется только каждые 300 мс или около того, создавая большое окно, в котором он не соответствует фактическому прогрессу видео.
Есть ли это какие альтернативы мне следует рассмотреть здесь? Есть ли способ получить более точное время запуска светодиодной процедуры? Я предпочитаю, чтобы задержка была меньше 30 мс, чтобы разница была практически незаметна для глаз.
Для справки вот код, который я пробовал до сих пор:
Попытка 1:
player = vlc.MediaPlayer()
player.toggle_fullscreen()
media = vlc.Media('/home/pi/Downloads/test.mp4')
player.set_media(media)
sleep(5)
player.play()
startLedRoutine()

Попытка 2:
player = vlc.MediaPlayer()
player.toggle_fullscreen()
media = vlc.Media('/home/pi/Downloads/test.mp4')
player.set_media(media)
sleep(5)
player.play()

while True:
if player.get_state() == vlc.State.Playing:
break

startLedRoutine()

Попытка 3:
player = vlc.MediaPlayer()
player.toggle_fullscreen()
media = vlc.Media('/home/pi/Downloads/test.mp4')
player.set_media(media)
sleep(5)
player.play()
sleep(5) # 10 seconds of black screen has been added to the start of the video
sleep(10 - player.get_time() * 1000) # sleep for the remainder of the time before 10s is reached
startLedRoutine()


Подробнее здесь: https://stackoverflow.com/questions/787 ... layback-us
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»