Przejdź do treści

Jak zrobić losowy odtwarzacz wideo Raspberry Pi?

    1647909603

    Jeśli masz kilka filmów, programów lub innych lokalnych plików wideo i nie możesz zdecydować, który z nich obejrzeć, możesz wybrać Raspberry Pi za jednym naciśnięciem przycisku. Aby być uczciwym, istnieją prostsze sposoby na odtwarzanie losowego wideo, z lokalnych plików lub w Internecie, ale nie są one tak zabawne jak ten projekt. Więc chwyć popcorn i zacznijmy budować i kodować nasz własny losowy odtwarzacz wideo Raspberry Pi!

    Sprzęt komputerowy

    Budowa obwodu dla tego projektu jest prosta. Potrzebujemy tylko trzech przycisków, podłączonych do GPIO na pinach 2,3,4, a każdy z tych przycisków musi być również podłączony do GND, w tym celu możemy użyć pojedynczego pinu GND na Pi i zworki żeńsko-męskiej . Podłączenie do szyny – płytki stykowej oznacza, że ​​mamy wiele połączeń GND, które można połączyć za pomocą dwóch zworek męskich i męskich. Aby uzyskać więcej informacji, zobacz diagram do pobrania dla tego projektu. Po zbudowaniu sprzętu podłącz wszystkie akcesoria wymagane do twojego Pi i uruchom komputer na pulpicie Raspbian.

    Oprogramowanie

    Podobnie jak w przypadku większości projektów Pi, zanim zrobisz cokolwiek innego, musisz skonfigurować Raspberry Pi z aktualną kopią systemu operacyjnego Raspbian. Jeśli nie chcesz używać dedykowanej klawiatury i myszy, możesz stworzyć bezgłowe Raspberry Pi, do którego masz dostęp z innego komputera przez VNC.

    Zanim będziemy mogli napisać jakikolwiek kod w Pythonie, musimy zainstalować dwie biblioteki, które pomogą nam stworzyć projekt. Otwórz terminal i wpisz następujące polecenie, pamiętaj, aby nacisnąć Enter na końcu każdego wiersza.

    $ sudo pip3 zainstaluj glob$ sudo pip3 zainstaluj klawiaturę

    Porozmawiamy o nich później. Na razie otwórz edytor Python 3, znajdujący się w menu Programowanie i kliknij Plik >> Nowy, aby utworzyć nowy pusty plik. Natychmiast kliknij Plik >> Zapisz w nowym oknie. Zapisz kod jako VideoPlayer.py i pamiętaj o częstym zapisywaniu!

    Więc teraz zaczynamy pisać kod, a naszym pierwszym działaniem jest zaimportowanie potrzebnych nam bibliotek. Pierwsze trzy biblioteki służą do wykrywania naciśnięć przycisków (GPIO Zero), zatrzymania kodu przed jednokrotnym uruchomieniem i wyjściem (pauza) oraz do wyboru losowego wideo (wybór).

    from gpiozero import Buttonz import sygnału wstrzymaj z losowego wyboru importu

    Ostatnie trzy importy to biblioteka, której użyjemy do wyświetlenia zawartości katalogu (glob), uruchomienia poleceń terminala (podproces), a ostatni to biblioteka do emulacji klawiatury (klawiatury).

    importuj globimport subprocessimportuj klawiaturę

    Idąc dalej tworzymy trzy funkcje, bloki kodu, które możemy później ponownie wykorzystać, wywołując ich nazwę. Pierwsza funkcja nazywa się „play_video” i najpierw tworzy listę (obiekt przechowywania danych) o nazwie „videos”.

    def play_video():videos = []

    Aby wypełnić listę informacjami, a konkretnie listą wszystkich filmów, które możemy odtworzyć, używamy pętli for, która będzie iterować po każdym pliku w katalogu, o ile jest to plik wideo mp4. W tym celu używamy „glob”, aby uzyskać dostęp do katalogu „/media/pi/Videos”, który w rzeczywistości jest pamięcią USB o nazwie „Videos” pełną plików mp4. Zmień to, aby dopasować nazwę wybranego katalogu pełnego filmów. Za każdym razem, gdy zostanie znaleziony plik mp4, jest on dołączany do utworzonej właśnie listy „wideo”.

    dla pliku w glob.glob(„/media/pi/Videos/*.mp4”): videos.append(plik)

    Sprawdźmy teraz, czy lista została wypełniona nazwami plików, drukując zawartość listy w powłoce Pythona.

    druk (filmy)

    Następnie wybieramy losowe wideo z listy i przechowujemy je w zmiennej o nazwie „wybrany”, ponownie wypisujemy to w powłoce Pythona.

    Następnie wybieramy losowe wideo z listy i przechowujemy je w zmiennej o nazwie „wybrany”, ponownie wypisujemy to w powłoce Pythona wybrany = wybór(wideo) print(wybrany) print(wybrany)

    Ostatni wiersz w tej funkcji wykorzystuje klasę Popen z biblioteki podprocesów do uruchomienia polecenia tak, jakbyśmy siedzieli przy terminalu, a to polecenie ma otworzyć odtwarzacz multimedialny omxplayer, a następnie odtworzyć wybrane wideo.

    subprocess.Popen([’omxplayer’,(wybrany)])

    Następna funkcja nazywa się „stop_video” i jak można się domyślić, zatrzyma aktualnie odtwarzany film. W tym celu używamy biblioteki klawiatury, a konkretnie funkcji „press_and_release” symulującej naciśnięcie klawisza „q”.

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

    Ostatnia funkcja nazywa się „pause_video” i emuluje naciśnięcie spacji na klawiaturze, w ten sposób omxplayer wstrzymuje wideo.

    def pause_video(): keyboard.press_and_release(’spacja’)

    Po utworzeniu funkcji musimy następnie powiedzieć naszemu kodowi, gdzie są połączone nasze przyciski. Mamy podłączone trzy przyciski, randomiser (odtwarzanie), stop i przycisk pauzy. Przyciski te są podłączone do GPIO odpowiednio na pinach 2, 3 i 4.

    randomiser = przycisk (2) stop = przycisk (3) pauza_przycisk = przycisk (4)

    Ok, przejdźmy więc do ostatniej części i to jest ta część, której szukamy po naciśnięciu przycisku i odpowiednio reaguje. Ale najpierw opakowujemy tę sekcję w procedurę obsługi wyjątków. Będzie próbował uruchomić kod, ale jeśli użytkownik naciśnie CTRL + C, kod zostanie zamknięty. Więc w sekcji try nasz kod najpierw wypisze trzy wiersze do powłoki, są to instrukcje dla użytkownika. Zauważysz „n” między każdym kolorem. Jest to skrót w języku Python, który wstawia nowy wiersz między każdą z instrukcji.

    spróbuj: print(„Naciśnij ZIELONY przycisk, aby rozpocząć, ŻÓŁTY, aby wstrzymać, CZERWONY, aby zatrzymać”)

    Nasze trzy przyciski czekają na naciśnięcie, a korzystając z biblioteki GPIO Zero nazywamy klasę „kiedy_wciśnięty”, aby wykryć, kiedy każdy z przycisków jest wciśnięty. Kiedy tak się dzieje, uruchamiana jest odpowiednia funkcja. Kiedy więc naciśniemy zielony przycisk randomiser (odtwórz), losowo wybierze wideo z pamięci USB i odtworzy je. Zauważysz, że funkcje nie mają () na końcu nazwy funkcji. Dzieje się tak, ponieważ gdyby tak się stało, kod uruchomiłby się automatycznie. W tej chwili są gotowe do uruchomienia na żądanie.

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

    Ostatni wiersz w tej sekcji to prosta pauza(), która służy do utrzymania działania kodu, a nie tylko do zakończenia po jednokrotnym uruchomieniu.

    pauza()

    Ale co się stanie, jeśli użytkownik naciśnie CTRL + C? Cóż, to jest „Przerwanie klawiatury” i jeśli tak się stanie, po prostu wydrukujemy pustą linię, a następnie „Wyjście” na ekranie.

    z wyjątkiem KeyboardInterrupt: print(„nEXIT”)

    Więc teraz zapisz swój kod i otwórz Terminal do katalogu, w którym zapisałeś kod. Aby użyć kodu, musimy uruchomić go z sudo (uprawnienia roota), ponieważ biblioteka klawiatury używana w projekcie może być używana tylko jako root / sudo.

    Aby uruchomić typ kodu:

    $ sudo python3 VideoPlayer.py

    Gdy wszystko jest gotowe, naciśnij zielony przycisk, aby odtworzyć losowo wybrane wideo, aby wstrzymać, naciśnij żółty, a aby zatrzymać, naciśnij czerwony. Ciesz się wieczorem i nie rozlewaj popcornu!

    Projekt można osadzić w twardym pudełku, aby małe rączki nie złamały elektroniki. Możesz także użyć przycisków w stylu arcade, które są znacznie solidniejsze i mniej podatne na uszkodzenia.

    Kompletny kod

    Jeśli chcesz tylko skopiować i wkleić zawartość do pliku VideoPlayer.py, oto jest:

    from gpiozero import Buttonfrom signal import pausefrom losowego import choiceimport globimport subprocessimport keyboarddef play_video(): videos = [] for file in glob.glob(„/media/pi/Videos/*.mp4”): videos.append(file)print( filmy)wybrane = wybór(filmy) print(wybrane) print(wybrane)subprocess.Popen([’omxplayer’,(wybrane)]) def stop_video()keyboard.press_and_release(’q’)def pause_video()keyboard.press_and_release( 'spacja’)randomiser – Przycisk(2)stop = Przycisk(3)pause_button = Przycisk(4)try:print(„Naciśnij ZIELONY przycisk, aby rozpocząćnŻÓŁTY, aby wstrzymać CZERWONY, aby zatrzymać”)randomiser.when_pressed = play_videostop.when_pressed = stop_videopause_button.when_pressed = pause_video pause() z wyjątkiem KeyboardInterrupt: print(„nEXIT”)Biblioteka klawiatury i prywatność

    W tym projekcie użyliśmy biblioteki Keyboard Python do emulacji klawiatury za pomocą tylko przycisków sterujących odtwarzaniem, wstrzymywaniem i zatrzymywaniem odtwarzania wideo. Biblioteka Klawiatury jest dość potężna i może być używana do naciskania dowolnych klawiszy, dzięki czemu możemy zautomatyzować wiele naciśnięć klawiszy za pomocą jednego przycisku (przydatne przy wychodzeniu z vima). Biblioteka może być również używana do pisania tekstu na ekranie, w podobny sposób do sceny Neo „podążaj za białym królikiem” z Matrixa. Ale najbardziej niebezpieczną funkcją tej biblioteki jest to, że może być używana do rejestrowania każdego naciśnięcia klawisza na docelowej maszynie.

    Te naciśnięcia klawiszy mogą być rejestrowane na liście, a następnie zapisywane w pliku, a następnie wykorzystywane do nikczemnych celów. Więc bądźmy szczerzy, dzieci, dorośli. Nagrywanie naciśnięć klawiszy użytkownika bez jego zgody jest nielegalne i może spowodować wiele kłopotów ze szkołą / pracą / władzami. Więc nie rób tego! Mając to na uwadze, może być używany jako potężne narzędzie podczas debugowania interakcji użytkownika z twoim kodem, więc w przypadku testowania oprogramowania (za zgodą ogółu społeczeństwa i testerów domowych) możesz zobaczyć, jakie klawisze naciskali tuż przed kodem zamknięty / poszedł termojądrowy!

    Biblioteka Klawiatury działa z systemami Linux i Windows i daje mnóstwo frajdy. Aby dowiedzieć się więcej o tej bibliotece, przejdź do tego wpisu na blogu https://bigl.es/tuesday-tooling-record-replay-keystrokes-with-python/ i zobacz kilka przykładów, jak można z niej korzystać.

    Artykuł pierwotnie ukazał się w Linux Format Magazine.

    0 0 votes
    Rating post
    Subscribe
    Powiadom o
    guest
    0 comments
    Inline Feedbacks
    View all comments
    0
    Would love your thoughts, please comment.x