実現したいこと
現状:動画と動画が切り替わるときに、一度動画ウィンドウが閉じて次の動画に切り替わるので、その一度ウィンドウが閉じた時にデスクトップ(現在開いている画面)が見えてしまう。
→デスクトップを写らない様に改善したいです。
発生している問題・分からないこと
動画の再生プログラム実行中、動画と動画の切り替え時にデスクトップが写ってしまう
エラーメッセージ
error
1エラーメッセージは表示されていません。
該当のソースコード
Python
1import RPi.GPIO as GPIO 2import subprocess 3import time 4import threading 5 6SWITCH_GPIO = 13 7LED_GPIO = 0 8TOGGLE_GPIO = 20 9 10VIDEO_SELECT = "/home/pi/Desktop/AEDファイル/モード切替.mp4" 11VIDEO_ADULT = "/home/pi/Desktop/AEDファイル/小学生~大人.mp4" 12VIDEO_CHILD = "/home/pi/Desktop/AEDファイル/未就学児.mp4" 13VIDEO_3in1 = "/home/pi/Desktop/AEDファイル/3in1.mp4" 14 15GPIO.setwarnings(False) 16GPIO.setmode(GPIO.BCM) 17GPIO.setup(SWITCH_GPIO, GPIO.IN, pull_up_down=GPIO.PUD_UP) 18GPIO.setup(LED_GPIO, GPIO.OUT) 19GPIO.setup(TOGGLE_GPIO, GPIO.IN, pull_up_down=GPIO.PUD_UP) 20 21button_pressed = False 22button_process = None 23 24 25def kill_ffplay(): 26 try: 27 subprocess.run(["pkill", "ffplay"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) 28 time.sleep(1) 29 except Exception as e: 30 print(f"Error killing ffplay: {e}") 31 32def play_video(video_path, blocking=True): 33 kill_ffplay() 34 if blocking: 35 subprocess.run([ 36 "ffplay", "-fs", "-noborder", "-autoexit", "-loglevel", "quiet", "-stats", "-analyzeduration", "1", "-probesize", "32", video_path], 37 stdout=subprocess.DEVNULL, 38 stderr=subprocess.DEVNULL 39 ) 40 else: 41 return subprocess.Popen([ 42 "ffplay", "-fs", "-noborder", "-autoexit", "-loglevel", "quiet", "-stats", "-analyzeduration", "1", "-probesize","32", video_path], 43 stdout=subprocess.DEVNULL, 44 stderr=subprocess.DEVNULL 45 ) 46 47def blink_led(): 48 while GPIO.input(SWITCH_GPIO) == GPIO.HIGH: 49 GPIO.output(LED_GPIO, GPIO.HIGH) 50 time.sleep(0.1) 51 GPIO.output(LED_GPIO, GPIO.LOW) 52 time.sleep(0.1) 53 54def monitor_button(): 55 global button_pressed 56 while not button_pressed: 57 if GPIO.input(SWITCH_GPIO) == GPIO.LOW: 58 button_pressed = True 59 GPIO.output(LED_GPIO, GPIO.LOW) 60 break 61 62 63try: 64 65 play_video(VIDEO_SELECT) 66 67 if GPIO.input(TOGGLE_GPIO) == GPIO.HIGH: 68 print("大人用動画") 69 button_process = play_video(VIDEO_ADULT, blocking=False) 70 else: 71 print("子供用動画") 72 button_process = play_video(VIDEO_CHILD, blocking=False) 73 74 button_pressed = False 75 76 time.sleep(55) 77 78 led_thread = threading.Thread(target=blink_led) 79 led_thread.start() 80 81 82 button_thread = threading.Thread(target=monitor_button) 83 button_thread.start() 84 85 led_thread.join() 86 87 if button_process is not None: 88 button_process.kill() 89 90 91 play_video(VIDEO_3in1) 92 93finally: 94 GPIO.cleanup() 95
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
pygameやopencv、vlc-pythonなどを使用して実行してみたのですが、変わりませんでした
補足
RaspberrypiOSを使用しています。Raspberrypi4modelB バージョンbullseye
ThonnyのIDEから実行しています。