Воспроизведение/Пауза VLC Для синхронизации в Python

#python #vlc #python-vlc

Вопрос:

Поэтому я использую расширение VLC python. Я пытаюсь совместить воспроизведение видео с другой программой. Поскольку медиаплеер VLC имеет некоторые различия в том, сколько времени требуется для загрузки мультимедиа и начала воспроизведения, иногда он может быть не выровнен. Я хочу открыть/загрузить видео в VLC, поставить его на паузу, а затем дождаться воспроизведения триггера, чтобы я мог выполнить команду в обратном порядке с другой частью моей программы.

Когда я ввожу значение в media_player.pause, видео не будет воспроизводиться, но другой процесс будет. Если я не добавлю никакого значения в функцию media_player.pause(), видео будет воспроизводиться без паузы

 import time, vlc
    
# media object
media = vlc.Media('video.mp4')
  
# setting media to the media player
media_player.set_media(media)
media_player = vlc.MediaPlayer()
media_player.set_media(media)

# Play to open/load the video
media_player.play()

# Pause the Video
media_player.pause()

# Other Stuff Happens

time.sleep(init_delay)
media_player.play()
 

Ответ №1:

Вам нужно дождаться загрузки видео или предварительного просмотра, прежде чем оно будет воспроизведено.
Он не будет останавливаться перед воспроизведением.
Простой ответ состоит в том, чтобы позволить видео перейти в состояние «воспроизведения», а затем приостановить его.
это можно сделать, просто дав ему время перейти в состояние воспроизведения, заснув, скажем, на 1 десятую долю секунды.
Вы не указываете, что такое активация trigger , поэтому в следующем примере я добавил удобный для Linux триггер клавиатуры, время ожидания которого истекает через 10 секунд.

 import time, vlc
import sys, select
    
# media object
media_player = vlc.MediaPlayer()
media = vlc.Media('V1.mp4')
vlc_playing = set([3, 4]) #  3 - Playing | 4 - Paused
media_state = None
# setting media to the media player
media_player.set_media(media)

# Play to open/load the video
media_player.play()
while media_state not in vlc_playing:
    time.sleep(0.1)
    media_state = media_player.get_state()

media_player.pause()
print("Paused - waiting for trigger")
print("Activate trigger with Enter or Ctrl C to terminate")

#  Here the activation trigger is provide by pressing the Enter key
#  within 10 seconds
#  I've no idea if this will work on a Non Linux box
#
try:
    inp, out, err = select.select( [sys.stdin], [], [], 10 )
    if inp:
        media_player.play()
    else:
        media_state = None
except KeyboardInterrupt:
    media_state = None

if media_state: # Play loop
    while media_state in vlc_playing:
        time.sleep(1)
        try: # Cater for Ctrl C during Play
            media_state = media_player.get_state()
        except Exception:
            media_state = None
        continue
else:
    print("No Activation trigger - Terminated")