OMXPlayer / Is_playing Problem

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
SnickSnackGamer
User
Beiträge: 1
Registriert: Dienstag 30. Mai 2017, 12:34

Hallo Liebe Python-Community,

ich komm bei einem Problem nicht weiter und zwar handelt es sich um "Is_playing" bei dem OMXPlayer + warpper.
Dazu möchte ich mehrere Clips hintereinander abspielen. Und dabei abfragen ob der OMXPlayer noch aktiv ist bzw. abspielt, sodass danach die Loopplaylist wider automatisch startet. Um genau zu sagen sie wird beim 3 Clip in der Mitte unterbrochen und startet dann mit dem 4 Clip.

Unten Fett/Rot markiert.

mfg.

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-
# read-mp3.py

import os
import sys
import time
import RPi.GPIO as GPIO
from glob import glob
from omxplayer import OMXPlayer

GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP)


last_state1 = True
last_state2 = True
status = False
input_state1 = True
input_state2 = True
a = True
player = OMXPlayer
Loopplaylist = glob('/media/pi/FILE/1*.mp4')#Abfrage für Loopplaylist(Nur ".mp4" Dateien)
Loopplaylist.sort()
Btn1_8 = glob('/media/pi/FILE/0*.mp4')#Abrage für Btn1-8(Nur ".mp4" Dateien)
Btn1_8.sort()
#print Loopplaylist
#print Btn1_8
while True:
 try:
       
    [color=#FF0000]    [b]
status = Player.is_playing()
[/b][/color]
     #  player = OMXPlayer(Loopplaylist[0])
	#Read states of inputs
	input_state1 = GPIO.input(17)
	input_state2 = GPIO.input(18)
	quite_video = GPIO.input(27)

	#If GPIO(17) is shorted to ground
	if input_state1 != last_state1:
      
          os.system('killall omxplayer.bin')
          player = OMXPlayer(Btn1_8[1])
        elif not input_state1:
          player = OMXPlayer(Btn1_8[1])
	elif input_state2 != last_state2:	
          os.system('killall omxplayer.bin')
          player = OMXPlayer(Btn1_8[1])
        elif not input_state2:
          player = OMXPlayer(Btn1_8[2])
    
#player.quit()
#print Loopplaylist[0]#Abfrage
#print Btn1_8[2]#Abfrage


 except KeyboardInterrupt:
    GPIO.cleanup()
    os.system('killall omxplayer.bin')

BlackJack

@SnickSnackGamer: Der Code ist falsch eingerückt, das ist so überhaupt nicht lauffähig.

Wenn man die Einrückung soweit korrigiert, dass es syntaktisch zumindest korrekt ist, dann gibt es einen `NameError` in der von Dir beschriebenen Zeile, weil `Player` nicht definiert ist. Solltest Du dort eigentlich `player` gemeint haben und eine `OMXPlayer.is_playing()`-Methode existieren, wird als nächstes sehr wahrscheinlich angemeckert das Du die auf der Klasse `OMXPlayer` aufrufst und nicht auf einem Exemplar davon. In dem Code ist `player` mal an die Klasse und mal an Objekte dieser Klasse gebunden, das ist verwirrend und ziemlich sicher falsch.

Eingerückt wird per Konvention übrigens mit vier Leerzeichen pro Ebene.

Den externen Prozess zu killen ist ziemlich sicher nicht die vorgesehene Methode so einen Player zu beenden. Zumal, falls wir von diesem omxplayer-wrapper reden das killen gar nicht nötig ist, denn man kann mit `OMXPlayer.load()` die aktuelle Quelle durch eine andere ersetzen, und/oder mit `stop()` oder `pause()` das abspielen anhalten. Es gibt also keinen Grund selbst Prozesse zu killen und immer wieder neue `OMXPlayer`-Objekte zu erstellen.

Die Aufräumaktionen sollen nicht nur bei Strg+C durchgeführt werden, sondern *immer* wenn das Programm den ``try``-Block verlässt, egal aus welchen Gründen. Der Aufräumcode gehört deshalb in einen ``finally``-Zweig.
Antworten