繁体   English   中英

使用 Python 的带 GPIO 按钮的 Raspberry Pi 随机视频

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM