ich versuche eine Videoaufnahme über pygame zu starten (im pygame Fenster läuft ein Livestream der Kamera, zusätzlich ist dort z.B. der "Aufnahme starten" Button). Ich habe bereits gelernt, dass das am besten über Multithreading läuft. Versuche ich das ganze ohne pygame funktioniert es schon. Leider klappt es jedoch mit pygame nicht (Es heißt immer Videofehler im Videoplayer, wenn ich das Video öffnen will, ich vermute dass die einzelnen Frames nicht zusammengefügt werden).
Grundgedanke: Im "videorekorder.py" modul gibt es die Klasse Videorekorder() Wenn man den "Aufnahme starten" Button klickt, ändert sich die Objekteigenschaft self.action auf True. Dadurch wird, wie der Name sagt, eine Aktion ausgelöst. Wenn Objekteigenschaft self.aufnahme_akitv == Falsch, dann wird sie entsprechend gestartet und self.action wieder auf False gesetzt. Wenn Der Button im self.aufnahme_aktiv Modus geklickt wird, wird self.action == True gesetzt, Aufnahme gestoppt und self.action wieder auf False gesetzt.
Mein Code bisher sieht so aus:
--> pygame-while Schleife:
Code: Alles auswählen
while True:
...
videorekorder.videorekorder_button.zeichne_button(SCREEN)
videorekorder.videorekorder_button.listener()
Code: Alles auswählen
in der kommenden Klasse habe ich alles was den Button angeht weggelassen, da in meinen Augen nicht relevant und eher verwirrend
class Videorekorder():
def __init__(self, action, aufnahme_aktiv):
self.action = action
self.aufnahme_aktiv = aufnahme_aktiv
def listener(self):
# Aufnahmebutton geklickt --> action --> aufnehmen
if self.action == True and self.aufnahme_aktiv == False:
self.recorder()
# Aufnahme stoppen Button geklickt --> action --> aufnahme stoppen
elif self.action == True and self.aufnahme_aktiv == True:
self.aufnahme_aktiv = False
recorder.join()
def recorder(self):
global recorder
recorder = Thread(target=self.videoRecorder)
recorder.start()
def videoRecorder(self):
# create a VideoWrite object, recoring to ./video.avi
VIDEO_BREITE, VIDEO_HOEHE = 500, 500
video = cv2.VideoWriter('video_temp.avi', cv2.VideoWriter_fourcc(*'XVID'), 30, (VIDEO_BREITE, VIDEO_HOEHE))
self.aufnahme_aktiv = True
while self.aufnahme_aktiv == True:
video.write(dronen_initialisierung.frame_read.frame)
time.sleep(1 / 60)
video.release()
da ich komplett neu bin was threading angeht: liegt einfach nur ein logischer fehler vor? programmiert man das so?
würde mich über tipps von profis freuen (:
danke