Если у вас есть куча фильмов, шоу или других локальных видеофайлов, и вы не можете решить, какой из них посмотреть, вы можете заставить Raspberry Pi выбирать за вас одним нажатием кнопки. Честно говоря, есть более простые способы воспроизведения случайного видео из локальных файлов или из Интернета, но они не так увлекательны, как этот проект. Так что хватайте попкорн и давайте начнем создавать и кодировать наш собственный случайный видеоплеер Raspberry Pi!
Аппаратное обеспечение
Построить схему для этого проекта просто. Нам нужны только три кнопки, подключенные к GPIO на контактах 2,3,4, и каждая из этих кнопок также должна быть подключена к GND, для этого мы можем использовать один контакт GND на Pi и перемычку между гнездами и штырями. . Подключение к -рейке макетной платы означает, что у нас есть несколько соединений GND, которые можно соединить с помощью двух перемычек типа «папа-папа». См. диаграмму в загрузке для этого проекта для получения дополнительной информации. Когда оборудование будет собрано, подключите все аксессуары, необходимые для вашего Pi, и загрузитесь на рабочий стол Raspbian.
Программное обеспечение
Как и в большинстве проектов Pi, прежде чем делать что-либо еще, вам необходимо настроить Raspberry Pi с текущей копией операционной системы Raspbian. Если вы не хотите использовать специальную клавиатуру и мышь, вы можете создать безголовый Raspberry Pi, к которому вы будете получать доступ с другого компьютера через VNC.
Прежде чем мы сможем написать какой-либо код Python, нам нужно установить две библиотеки, которые помогут нам создать проект. Откройте Терминал и введите следующее, не забывайте нажимать Enter в конце каждой строки.
$ sudo pip3 установить glob $ sudo pip3 установить клавиатуру
Мы поговорим о них позже. А пока откройте редактор Python 3, который находится в меню «Программирование», и нажмите «Файл» >> «Создать», чтобы создать новый пустой файл. Немедленно нажмите Файл >> Сохранить в новом окне. Сохраните код как VideoPlayer.py и не забывайте сохранять его почаще!
Итак, теперь мы приступаем к написанию кода, и наше первое действие — импорт необходимых библиотек. Первые три библиотеки используются для обнаружения нажатий кнопок (GPIO Zero), предотвращения однократного запуска и выхода кода (пауза) и выбора случайного видео (выбор).
from gpiozero import Buttonfrom signal import pausefrom random import selection
Последние три импорта — это библиотека, которую мы будем использовать для вывода списка содержимого каталога (glob), запуска команд терминала (подпроцесс), а последняя — это библиотека для эмуляции клавиатуры (keyboard).
подпроцесс импорта globiimportклавиатура импорта
Двигаясь дальше, мы создаем три функции, блоки кода, которые мы можем позже повторно использовать, вызывая их имена. Первая функция называется «play_video», и она сначала создает список (объект хранения данных) с именем «videos».
определение play_video (): видео = []
Чтобы заполнить список информацией, в частности списком всех видео, которые мы можем воспроизвести, мы используем цикл for, который будет перебирать каждый файл в каталоге, если это видеофайл mp4. Для этого мы используем «glob» для доступа к каталогу «/media/pi/Videos», который на самом деле представляет собой USB-накопитель с названием «Videos», полный файлов mp4. Измените это, чтобы оно соответствовало названию выбранного вами каталога, полного видео. Каждый раз, когда найден mp4, он добавляется в список «видео», который мы только что создали.
для файла в glob.glob(«/media/pi/Videos/*.mp4»): videos.append(file)
Итак, теперь давайте проверим, заполнен ли список именами файлов, распечатав содержимое списка в оболочке Python.
печать(видео)
Затем мы выберем случайное видео из списка и сохраним его в переменной с именем «выбрано», снова мы напечатаем это в оболочке Python.
Затем мы выберем случайное видео из списка и сохраним его в переменной с именем «выбрано», снова мы напечатаем это в оболочке Python selected = selection(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(‘пробел’)
После создания функций нам нужно указать нашему коду, где наши кнопки подключены. У нас подключено три кнопки, рандомайзер (воспроизведение), стоп и кнопка паузы. Эти кнопки подключены к GPIO на контактах 2, 3 и 4 соответственно.
рандомайзер = кнопка(2)стоп=кнопка(3)пауза_кнопка=кнопка(4)
Итак, перейдем к последней части, и это та часть, которая ищет нажатие кнопки и соответственно реагирует. Но сначала мы оборачиваем этот раздел в обработчик исключений. Он попытается запустить код, но если пользователь нажмет CTRL + C, код завершится. Итак, для раздела try наш код сначала напечатает три строки в оболочке, это инструкции для пользователя. Вы заметите «n» между каждым цветом. Это сокращение Python для вставки новой строки между каждой из инструкций.
try: print(«Нажмите ЗЕЛЕНУЮ кнопку, чтобы начать, ЖЕЛТУЮ, чтобы сделать паузу, или КРАСНУЮ, чтобы остановить»)
Наши три кнопки ждут нажатия, и с помощью библиотеки GPIO Zero мы вызываем класс «when_pressed», чтобы определить, когда нажата каждая из кнопок. Когда это происходит, запускается соответствующая функция. Поэтому, когда мы нажимаем зеленую кнопку рандомизации (воспроизведение), он случайным образом выбирает видео с USB-накопителя и воспроизводит его. Вы заметите, что функции не имеют () в конце имени функции. Это потому, что если бы они это сделали, код запустился бы автоматически. Прямо сейчас они готовы работать по требованию.
randomiser.when_pressed = play_video stop.when_pressed = stop_video pause_button.when_pressed = pause_video
Последняя строка в этом разделе — это простая пауза(), и она используется для продолжения работы кода, а не просто выхода после однократного запуска.
Пауза()
Но что произойдет, если пользователь нажмет CTRL + C? Что ж, это «Прерывание клавиатуры», и если это произойдет, мы просто напечатаем пустую строку, а затем «Выход» на экране.
кроме KeyboardInterrupt: print(«nEXIT»)
Итак, теперь сохраните свой код и откройте терминал в каталоге, в котором вы сохранили код. Чтобы использовать код, нам нужно запустить его с правами sudo (права root), так как библиотека клавиатуры, используемая в проекте, может использоваться только как root/sudo.
Чтобы запустить тип кода:
$ sudo python3 VideoPlayer.py
Когда будете готовы, нажмите зеленую кнопку, чтобы воспроизвести случайно выбранное видео, для паузы нажмите желтую кнопку, а для остановки нажмите красную. Приятного вечера и не рассыпайте попкорн!
Вы можете встроить проект в жесткий ящик, чтобы маленькие ручки не сломали электронику. Вы также можете использовать кнопки в аркадном стиле, которые намного надежнее и с меньшей вероятностью сломаются.
Полный код
Если вы просто хотите скопировать и вставить содержимое в файл VideoPlayer.py, вот оно:
from gpiozero import Buttonfrom signal import pausefrom random import selectionimport globiimport subprocessimport keyboarddef play_video(): videos = [] для файла в glob.glob(«/media/pi/Videos/*.mp4»): videos.append(file)print( видео)выбрано = выбор(видео) печать(выбрано) печать(выбрано)подпроцесс.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(«Нажмите ЗЕЛЕНУЮ кнопку, чтобы запуститьnЖЕЛТУЮ, чтобы приостановить,RED, чтобы остановить»)randomiser.when_pressed = play_videostop.when_pressed = stop_videopause_button.when_pressed = pause_video pause()кроме KeyboardInterrupt: print(«nEXIT»)Библиотека клавиатуры и конфиденциальность
В этом проекте мы использовали библиотеку Keyboard Python для эмуляции клавиатуры, используя только кнопки, которые управляли воспроизведением, приостановкой и остановкой воспроизведения видео. Библиотека клавиатуры довольно мощная, и ее можно использовать для нажатия любых клавиш, поэтому мы можем автоматизировать нажатие нескольких клавиш одной кнопкой (удобно для выхода из vim). Библиотеку также можно использовать для вывода текста на экран в виде в манере, похожей на сцену Нео «Следуй за белым кроликом» из «Матрицы». Но самая опасная функция этой библиотеки заключается в том, что ее можно использовать для записи каждого нажатия клавиши на целевой машине.
Эти нажатия клавиш могут быть записаны в список, затем сохранены в файл и затем использованы в гнусных целях. Итак, давайте будем честными, дети, взрослые. Запись нажатий клавиш пользователя без его согласия является незаконной и может привести к большим проблемам со школой / работой / властями. Так что не делайте этого! При этом его можно использовать как мощный инструмент при отладке того, как пользователь взаимодействует с вашим кодом, поэтому для тестирования программного обеспечения (с согласия широкой публики и внутренних тестировщиков) вы можете увидеть, какие клавиши они нажимали прямо перед кодом. заперли / пошли термоядерные!
Библиотека клавиатуры работает с Linux и Windows, и с ней очень весело играть. Чтобы узнать немного больше об этой библиотеке, перейдите к этому сообщению в блоге https://bigl.es/tuesday-tooling-record-replay-keystrokes-with-python/ и посмотрите несколько примеров того, как ее можно использовать.
Эта статья впервые появилась в журнале Linux Format Magazine.