Skip to content

如何制作树莓派随机视频播放器

    1647909603

    如果您有一堆电影、节目或其他本地视频文件,并且无法决定观看哪一个,您可以让 Raspberry Pi 为您选择,只需按一下按钮。公平地说,有更简单的方法来播放随机视频,无论是从本地文件还是在网络上,但它们没有这个项目那么有趣。所以拿起爆米花,让我们开始构建和编码我们自己的 Raspberry Pi 随机视频播放器吧!

    硬件

    为这个项目构建电路很简单。我们只需要三个按钮,在引脚 2、3、4 处连接到 GPIO,每个按钮也需要连接到 GND,为此我们可以在 Pi 上使用单个 GND 引脚,以及母对公跳线. 连接到面包板的 – 导轨意味着我们有多个 GND 连接,可以通过两根公对公跳线连接。有关更多信息,请参阅此项目下载中的图表。构建硬件后,连接 Pi 所需的所有附件并启动到 Raspbian 桌面。

    软件

    与大多数 Pi 项目一样,在您执行任何其他操作之前,您需要使用 Raspbian 操作系统的当前副本设置您的 Raspberry Pi。如果您不想使用专用的键盘和鼠标,您可以创建一个无头 Raspberry Pi,您可以通过 VNC 从另一台计算机访问它。

    在我们编写任何 Python 代码之前,我们需要安装两个库来帮助我们创建项目。打开终端,然后输入以下内容,记得在每行的末尾按 Enter。

    $ sudo pip3 安装 glob$ sudo pip3 安装键盘

    我们稍后会详细讨论它们。现在打开 Python 3 编辑器,在 Programming 菜单中找到,然后单击 File >> New 创建一个新的空白文件。立即在新窗口中单击文件>>保存。将代码另存为 VideoPlayer.py 并记得经常保存!

    所以现在我们开始编写代码,我们的第一步是导入我们需要的库。前三个库用于检测按钮按下(GPIO 零)、停止代码运行一次并退出(暂停)以及选择随机视频(选择。)

    从 gpiozero 导入按钮从信号导入暂停从随机导入选择

    最后三个导入是一个库,我们将使用它来列出目录(glob)的内容,运行终端命令(子进程),最后一个是模拟键盘(键盘)的库。

    导入 glob 导入子进程导入键盘

    继续我们创建三个函数,代码块,我们以后可以通过调用它们的名称来重用它们。第一个函数称为“play_video”,它首先创建一个名为“videos”的列表(数据存储对象)。

    def play_video():videos = []

    为了用信息填充列表,特别是我们可以播放的所有视频的列表,我们使用 for 循环,它将遍历目录中的每个文件,只要它是 mp4 视频文件。为此,我们使用“glob”访问目录“/media/pi/Videos”,该目录实际上是一个名为“Videos”的 U 盘,里面充满了 mp4 文件。更改它以匹配您选择的充满视频的目录的名称。每次找到 mp4 时,都会将其附加到我们刚刚创建的“视频”列表中。

    对于 glob.glob(“/media/pi/Videos/*.mp4”) 中的文件:video.append(file)

    所以现在让我们通过将列表的内容打印到 Python shell 来检查列表是否已经填充了文件名。

    打印(视频)

    然后我们将从列表中选择一个随机视频并将其存储在一个名为“chosen”的变量中,我们再次将其打印到 Python shell。

    然后我们将从列表中选择一个随机视频并将其存储在一个名为“chosen”的变量中,我们再次将其打印到 Python shell selected = choice(videos) print(chosen) print(chosen)

    该函数的最后一行使用子进程库中的 Popen 类来运行一个命令,就像我们坐在终端上一样,这个命令是打开 omxplayer 媒体播放器,然后播放选择的视频。

    subprocess.Popen([‘omxplayer’,(选择)])

    下一个函数称为“stop_video”,您可以猜到它将停止当前播放的视频。为此,我们使用键盘库,特别是“press_and_release”函数来模拟按下“q”键。

    def stop_video():keyboard.press_and_release(‘q’)

    最后一个函数称为“pause_video”,它模拟按下键盘上的空格键,这就是 omxplayer 暂停视频的方式。

    def pause_video():keyboard.press_and_release(‘space’)

    创建函数后,我们接下来需要告诉我们的代码我们的按钮连接在哪里。我们连接了三个按钮,randomizer(播放)、stop 和 pause_button。这些按钮分别在引脚 2、3 和 4 处连接到 GPIO。

    randomiser = Button(2)stop = Button(3)pause_button = Button(4)

    好的,直到最后一部分,这是在按下按钮时查找并做出相应反应的部分。但首先我们将此部分包装在异常处理程序中。它将尝试运行代码,但如果用户按下 CTRL + C 则代码将退出。所以对于 try 部分,我们的代码将首先向 shell 打印三行,这些是给用户的指令。您会注意到每种颜色之间的“n”。这是在每条指令之间插入新行的 Python 速记。

    try: print(“按下绿色按钮开始n黄色暂停n红色停止”)

    我们的三个按钮正在等待被按下,使用 GPIO Zero 库,我们调用“when_pressed”类来检测每个按钮何时被按下。发生这种情况时,将运行相应的函数。因此,当我们按下绿色随机发生器(播放)按钮时,它会从 U 盘中随机选择一个视频并播放。您会注意到函数名称的末尾没有 ()。这是因为如果他们这样做了,那么代码将自动运行。现在,它们已准备好按需运行。

    randomiser.when_pressed = play_video stop.when_pressed = stop_video pause_button.when_pressed = pause_video

    本节的最后一行是一个简单的 pause(),它用于保持代码运行,而不仅仅是运行一次后退出。

    暂停()

    但是如果用户按下 CTRL + C 会发生什么?好吧,这是一个“键盘中断”,如果发生这种情况,我们只需在屏幕上打印一个空行然后“退出”。

    除了键盘中断:打印(“nEXIT”)

    所以现在保存你的代码,然后打开一个终端到你保存代码的目录。为了使用代码,我们需要使用 sudo (root powers) 运行它,因为项目中使用的键盘库只能作为 root / sudo 使用。

    运行代码类型:

    $ sudo python3 VideoPlayer.py

    准备好后按绿色按钮播放随机选择的视频,暂停按黄色,停止按红色。享受你的夜晚,不要洒爆米花!

    您可以将项目嵌入一个坚固的盒子中,这样小手就不会破坏电子设备。您还可以使用街机风格的按钮,这些按钮更加强大且不易损坏。

    完整代码

    如果您只想将内容复制并粘贴到 VideoPlayer.py 文件中,则为:

    from gpiozero import Buttonfrom signal import pausefrom random import choiceimport globimport subprocessimport keyboarddef play_video(): videos = [] for file in glob.glob(“/media/pi/Videos/*.mp4”): videos.append(file)print(视频)选择=选择(视频)打印(选择)打印(选择)subprocess.Popen([‘omxplayer’,(选择)])def stop_video()keyboard.press_and_release(’q’)def pause_video()keyboard.press_and_release( ‘space’)randomiser – Button(2)stop = Button(3)pause_button = Button(4)try:print(“按下绿色按钮开始nYELLOW to pausenRED to stop”)randomiser.when_pressed = play_videostop.when_pressed = stop_videopause_button.when_pressed = pause_video pause()except KeyboardInterrupt: print(“nEXIT”)键盘库和隐私

    在这个项目中,我们使用 Keyboard Python 库来模拟键盘,只使用控制播放、暂停和停止视频播放的按钮。Keyboard 库非常强大,它可以用来按下任何键,所以我们可以通过一个按钮自动按下多个键(对于退出 vim 很方便。)该库还可以用于在屏幕上写入文本,在类似于《黑客帝国》中 Neo 的“跟随白兔”场景。但是这个库最危险的功能是它可以用来记录目标机器上的每一次按键操作。

    这些按键可以记录到列表中,然后保存到文件中,然后用于邪恶目的。所以让我们清楚孩子,大人。在未经用户同意的情况下记录用户的按键是非法的,并且会给你在学校/工作/当局带来很多麻烦。所以不要这样做!话虽如此,它可以用作调试用户如何与您的代码交互时的强大工具,因此对于软件测试(在公众和内部测试人员的同意下),您可以看到他们在代码之前按下了哪些键锁定/进入热核!

    键盘库适用于 Linux 和 Windows,玩起来很有趣。要了解有关此库的更多信息,请访问此博客文章 https://bigl.es/tuesday-tooling-record-replay-keystrokes-with-python/ 并查看一些如何使用它的示例。

    这篇文章最初出现在 Linux 格式杂志上。

    0 0 votes
    Rating post
    Subscribe
    Notify of
    guest
    0 comments
    Inline Feedbacks
    View all comments
    0
    Would love your thoughts, please comment.x
    ()
    x