Перейти до вмісту

Як зробити випадковий відеоплеєр Raspberry Pi

    1647909603

    Якщо у вас є купа фільмів, шоу чи інших локальних відеофайлів, і ви не можете вирішити, який з них подивитися, ви можете зробити 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 install glob$ sudo pip3 install keyboard

    Детальніше про них ми поговоримо пізніше. Наразі відкрийте редактор Python 3, знайдений у меню «Програмування», і натисніть «Файл» >> «Новий», щоб створити новий порожній файл. У новому вікні негайно натисніть Файл >> Зберегти. Збережіть код як VideoPlayer.py і не забувайте часто зберігати!

    Отже, тепер ми починаємо писати код, і наша перша дія — імпортувати потрібні нам бібліотеки. Перші три бібліотеки використовуються для виявлення натискань кнопок (GPIO Zero), зупинки одноразового запуску коду та виходу (пауза), а також для вибору випадкового відео (вибір).

    з кнопки імпорту gpiozero з паузи імпорту сигналу з вибору випадкового імпорту

    Останні три імпорту — це бібліотека, яку ми будемо використовувати для переліку вмісту каталогу (glob), запуску команд терміналу (підпроцес), а останній — це бібліотека для емуляції клавіатури (клавіатури).

    import globimport subprocessimport keyboard

    Продовжуючи, ми створюємо три функції, блоки коду, які ми можемо згодом використовувати повторно, називаючи їх ім’я. Перша функція називається «play_video» і спочатку створює список (об’єкт зберігання даних), який називається «відео».

    def play_video():відео = []

    Щоб заповнити список інформацією, зокрема списком усіх відео, які ми можемо відтворювати, ми використовуємо цикл for, який перебирає кожен файл у каталозі, якщо це відеофайл mp4. Для цього ми використовуємо «glob» для доступу до каталогу «/media/pi/Videos», який насправді є USB-накопичувачем під назвою «Відео», наповненим файлами mp4. Змініть це, щоб відповідати назві вибраного вами каталогу, повного відео. Щоразу, коли файл mp4 знайдено, він додається до списку «відео», який ми щойно створили.

    для файлу в glob.glob(“/media/pi/Videos/*.mp4”): videos.append(file)

    Отже, тепер давайте перевіримо, чи список було заповнено іменами файлів, надрукувавши вміст списку в оболонці Python.

    друк (відео)

    Потім ми виберемо випадкове відео зі списку і збережемо його у змінній під назвою «chosen», знову виведемо це в оболонку Python.

    Потім ми виберемо випадкове відео зі списку та збережемо його у змінній під назвою «chosen», ми знову друкуємо це в оболонці Python selected = choice(videos) print(chosen) print(chosen)

    Останній рядок у цій функції використовує клас Popen з бібліотеки підпроцесів для виконання команди, наче ми сиділи за терміналом, і ця команда має відкрити медіаплеєр omxplayer, а потім відтворити вибране відео.

    subprocess.Popen([‘omxplayer’,(chosen)])

    Наступна функція називається «stop_video», і, як ви можете здогадатися, вона зупинить відео, що відтворюється. Для цього ми використовуємо бібліотеку клавіатури, зокрема функцію «press_and_release», щоб імітувати натискання клавіші «q».

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

    Остання функція називається «pause_video» і імітує натискання клавіші пробілу на клавіатурі, завдяки чому omxplayer призупиняє відео.

    def pause_video(): keyboard.press_and_release(‘пробіл’)

    Зі створеними функціями нам потрібно вказати нашому коду, де підключені наші кнопки. У нас є три підключені кнопки: randomiser (відтворення), stop і pause_button. Ці кнопки підключені до GPIO на контактах 2, 3 і 4 відповідно.

    randomiser = кнопка (2) стоп = кнопка (3) кнопка_паузи = кнопка (4)

    Добре, до останньої частини, і це частина, яка шукає, коли натискається кнопка, і відповідно реагує. Але спочатку ми загортаємо цей розділ в обробник винятків. Він спробує запустити код, але якщо користувач натисне CTRL + C, код завершиться. Тому для розділу спроб наш код спочатку надрукує три рядки в оболонку, це інструкції для користувача. Ви помітите «n» між кожним кольором. Це скорочення Python для вставки нового рядка між кожною з інструкцій.

    спробуйте: print(“Натисніть ЗЕЛЕНУ кнопку, щоб почати, ЖОВТИЙ, щоб призупинити ЧЕРВОНУ, щоб зупинити”)

    Наші три кнопки чекають натискання, і, використовуючи бібліотеку GPIO Zero, ми викликаємо клас «when_pressed», щоб визначити, коли кожна з кнопок натиснута. Коли це відбувається, запускається відповідна функція. Тому, коли ми натискаємо зелену кнопку рандомайзера (відтворення), він випадковим чином вибирає відео з USB-накопичувача та відтворює його. Ви помітите, що функції не мають () в кінці назви функції. Це тому, що якби вони це зробили, то код запустився б автоматично. Зараз вони готові працювати на вимогу.

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

    Останній рядок у цьому розділі — це простий pause(), який використовується для підтримки роботи коду, а не просто для виходу після одноразового запуску.

    пауза()

    Але що станеться, якщо користувач натисне CTRL + C? Ну, це «переривання клавіатури», і якщо це станеться, ми просто надрукуємо порожній рядок, а потім «Вийти» на екрані.

    крім KeyboardInterrupt: print(“nEXIT”)

    Тож тепер збережіть свій код і відкрийте термінал до каталогу, де ви зберегли код. Щоб використовувати код, нам потрібно запустити його за допомогою sudo (повноваження root), оскільки бібліотека клавіатури, яка використовується в проекті, може використовуватися лише як root / sudo.

    Щоб запустити введіть код:

    $ sudo python3 VideoPlayer.py

    Коли будете готові, натисніть зелену кнопку, щоб відтворити випадково вибране відео, для паузи натисніть жовту, а щоб зупинити, натисніть червону. Насолоджуйтесь вечором і не проливайте попкорн!

    Ви можете помістити проект у міцну коробку, щоб маленькі ручки не зламали електроніку. Ви також можете використовувати кнопки аркадного стилю, які набагато надійніші та менш ймовірно зламані.

    Повний код

    Якщо ви просто хочете скопіювати та вставити вміст у файл VideoPlayer.py, ось він:

    з gpiozero кнопка імпортувід сигналу імпорт пауза від випадкового вибору імпортуimport globimport subprocessimport keyboarddef play_video(): videos = [] для файлу в glob.glob(“/media/pi/Videos/*.mp4”): videos.append(file)print( videos)chosen = вибір(відео) print(chosen) print(chosen)subprocess.Popen([‘omxplayer’,(chosen)]) def stop_video()keyboard.press_and_release(‘q’)def pause_video()keyboard.press_and_release( ‘пробіл’)randomiser – Button(2)stop = Button(3)pause_button = Button(4)try:print(“Натисніть ЗЕЛЕНУ кнопку, щоб почати, ЖОВТУ, щоб призупинитиЧЕРВОНУ, щоб зупинити”)randomiser.when_pressed = play_videostop.when_pressed = stop_videopause_button. = pause_video pause() крім KeyboardInterrupt: print(“nEXIT”) Бібліотека та конфіденційність клавіатури

    У цьому проекті ми використовували бібліотеку Keyboard Python для емуляції клавіатури, використовуючи лише кнопки, які керували відтворенням, призупиненням та зупинкою відтворення відео. Бібліотека клавіатури є досить потужною, і її можна використовувати для натискання будь-яких клавіш, тому ми можемо автоматизувати кілька натискань клавіш за допомогою однієї кнопки (зручно для виходу з vim). Бібліотеку також можна використовувати для запису тексту на екран, у схожа на сцену Нео «Йди за білим кроликом» із «Матриці». Але найнебезпечнішою функцією цієї бібліотеки є те, що її можна використовувати для запису кожного натискання клавіші на цільовій машині.

    Ці натискання клавіш можуть бути записані до списку, потім збережені у файлі, а потім використані для підступних цілей. Тож давайте будемо зрозумілі, діти, дорослі. Запис натискань клавіш користувача без його згоди є незаконним і може призвести до великих проблем зі школою / роботою / органами влади. Тому не робіть цього! З огляду на це, його можна використовувати як потужний інструмент під час налагодження того, як користувач взаємодіє з вашим кодом, тому для тестування програмного забезпечення (за згодою широкого загалу та внутрішніх тестувальників) ви можете побачити, які клавіші вони натискали безпосередньо перед кодом. замкнений / став термоядерним!

    Бібліотека клавіатури працює з Linux та Windows, і грати з нею дуже весело. Щоб дізнатися більше про цю бібліотеку, перейдіть до цієї публікації в блозі https://bigl.es/tuesday-tooling-record-replay-keystrokes-with-python/ і подивіться кілька прикладів того, як її можна використовувати.

    Ця стаття спочатку з’явилася в журналі Linux Format Magazine.

    0 0 голосів
    Rating post
    Підписатися
    Сповістити про
    guest
    0 comments
    Вбудовані Відгуки
    Переглянути всі коментарі
    0
    Ми любимо ваші думки, будь ласка, прокоментуйте.x