[英]Raspberry Pi Random Video w/ GPIO Button using Python
所以我不是 Python 开发人员,我拼凑了一些有用的东西,但不是我想要的。 让我描述一下我想要什么:
在古董电视上,我希望 Pi 播放连续的随机视频。 如果按下按钮,我想更改为新的随机视频,并继续播放随机视频,除非按下另一个按钮。
简单地说,Python 代码应该播放随机视频 - 如果按下按钮,则开始播放不同的随机视频。 之后,应该播放更多随机视频。
作为背景,我有一台经过精心修复的 1946 年 Philco Predicta 电视,并试图让它在 2o2o 中更有用。 我的视频文件夹中充满了正确的视频和广告......当我的代码变得更好时会很棒。
这是我目前拼凑起来的。 它现在所做的是......当我启动系统时,它会播放一个随机视频。 然后,它会在按下按钮时播放随机视频。 任何人都可以帮我做这更像我想要的吗?
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import os
import random
buttonPin = 21
directory = "/home/pi/Videos/"
GPIO.setmode(GPIO.BCM)
GPIO.setup(buttonPin, GPIO.IN)
def playEpisode():
episode = random.choice(os.listdir(directory))
cmd = "nohup omxplayer --aspect-mode stretch "+"'"+directory+episode+"' &"
# cmd = "nohup omxplayer -o alsa --aspect-mode stretch "+"'"+directory+episode+"' &"
# the above w/ added -o alsa for bluetooth speakers fails after the first video. because of how i kill omxplayer? or nohup? further investigation needed.
print('Killing all omxplayer processes . . .')
os.system('killall omxplayer.bin')
os.system(cmd)
try:
# os.system('clear')
#added below to see if it will play random UNTIL button press...
playEpisode()
print('Waiting for button press . . .')
GPIO.wait_for_edge(buttonPin, GPIO.FALLING)
print('[x] Recieved button press.')
print('Playing random video . . .')
playEpisode()
#point to location of this file
os.system('sudo python /home/pi/predicta.py')
except KeyboardInterrupt:
os.system('killall omxplayer.bin')
GPIO.cleanup()
#!/usr/bin/python
import time
import os
import random
from gpiozero import Button
from signal import pause
from contextlib import contextmanager
import sys
buttonPin = 21
directory = "/home/pi/Videos/"
@contextmanager
def suppress_stdout():
with open(os.devnull, "w") as devnull:
old_stdout = sys.stdout
sys.stdout = devnull
try:
yield
finally:
sys.stdout = old_stdout
def playEpisode():
with suppress_stdout():
episode = random.choice(os.listdir(directory))
cmd = "nohup omxplayer --aspect-mode stretch "+"'"+directory+epis$
os.system('sudo killall omxplayer.bin')
os.system('sudo killall omxplayer')
os.system(cmd)
playEpisode()
button = Button(buttonPin)
button.when_released = playEpisode
pause()
我稍微更新了我的代码......这个在运行时开始一个随机视频,然后如果按下按钮将转到一个新的随机视频 - 如果在随机视频停止后按下按钮,它将播放一个新的随机视频......
但我仍然想以某种方式测试 omxplayer 是否正在运行或停止 - 如果 omxplayer 停止播放当前视频,则播放另一个随机视频。 只要在所有工作期间按下按钮,我就会非常接近。
稍后,我很想在每 3 个视频之后添加一个广告 - 但现在不需要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.