0

omxplayer を使用して 4 つのビデオを再生する必要がある Raspberry Pi 3 を使用して DIY プロジェクトを行っています。

プロトボードの特定のボタンを押すと、各ビデオが再生されます。

  • ボタン 1 を押す - ビデオ 1 を再生
  • ボタン 2 を押す - ビデオ 2 を再生
  • ボタン 3 を押す - ビデオ 3 を再生
  • ボタン 4 を押します - ビデオ 4 を再生します

次の python コードを使用して、ボタンのいずれかを押すたびに、4 つのビデオの再生に成功しました。

import RPi.GPIO as GPIO
import time
import os

GPIO.setmode(GPIO.BCM)   # Declaramos que los pines seran llamados como numeros
GPIO.setwarnings(False)

GPIO.setup(4, GPIO.IN)  # GPIO  7 como entrada
GPIO.setup(17, GPIO.IN) # GPIO 17 como entrada
GPIO.setup(27, GPIO.IN) # GPIO 27 como entrada
GPIO.setup(22, GPIO.IN) # GPIO 22 como entrada

pathVideos = "/home/pi/VideoHD/Belen"                   # Directorio donde se encuentran los videos en HD

def reproducirVideos(nameVideo):
    command = "omxplayer -p -o hdmi %s/%s.mp4" % (pathVideos,nameVideo)
    os.system(command)
    print "Reproduciendo el Video: %s " % nameVideo

def programaPrincipal():
    print("Inicio")

    while True:
        if (GPIO.input(4)):
            print("Iniciando Video: AMANECER")
            reproducirVideos("amanecer")
        elif (GPIO.input(17)):
            print("Iniciando Video: DIA")
            reproducirVideos("dia")
        elif (GPIO.input(27)):
            print("Iniciando Video: ATARDECER")
            reproducirVideos("atardecer")
        elif (GPIO.input(22)):
            print("Iniciando Video: ANOCHECER")
            reproducirVideos("anochecer")
        else:
            pass
    print("Fin de programa")
    GPIO.cleanup() #Limpiar los GPIO  


programaPrincipal()                           #Llamamos a la funcion blinkLeds para ejecutar el programa

これが私の問題です。

ボタン 1 などのボタンを押すと、ビデオ 1 全体が画面上で適切に再生されます。video1 の実行中に任意のボタンを押しても、何も起こりません。私が達成したいのは、protoboard の任意のボタンを押すたびに、omxplayer がビデオの再生を停止し (再生中の場合)、新しいビデオを開始することです。

次のリンクで彼らが言うように、PIPEを使用してomxplayerを殺すことについて何かを読みましたが、成功しませんでした:

Python サブプロセスで omxplayer を強制終了するにはどうすればよいですか

どんな助けでも大歓迎です

4

3 に答える 3

0

omxplayerのすべてのプロセスを強制終了するために、 reproducirVideos()関数を次のコードで変更しました。

def reproducirVideos(nameVideo):
    command1 = "sudo killall -s 9 omxplayer.bin"
    os.system(command1)
    command2 = "omxplayer -p -o hdmi %s/%s.mp4 &" % (pathVideos,nameVideo)
    os.system(command2)
    print "Reproduciendo el Video: %s " % nameVideo

バックグラウンドでコマンドを実行するために、 command2の最後に&も追加しました。

少し「ハッキー」ですが、私にとっては適切に機能しました:)

于 2016-09-27T17:14:21.057 に答える