Sonntag, 7. März 2021

Adafruit Raspberry Pi Video Looper

 für meine Audiokassetten-Simulationen suchte ich nach einer Möglichkeit die Titel, die als mp4-Videos vorliegen, in einer zufälligen Reihenfolge von Speicherkarte oder USB-Stick abzuspielen. iTV und iRadio arbeiten nur mit starren playlisten (PS: zum damaligen Zeitpunkt), und die ersteren Titel laufen dann oft, und die hinteren Titel kommen nur selten mal an die Reihe. Ich fand dann den Raspberry Pi Video Looper von Adafriut, welcher intern mit dem omxplayer abspielt (wahlweise auch mit hello_video).
Installation und Konfiguration erwiesen sich als einfach und unkritisch und sind hier nachzulesen.
Es wird einfach nur ein fertiges raspbian (mittlerweile raspberry pi os) vorausgesetzt mit praktischerweise SSH Zugriff.

Die software wird dann bei github ausgecheckt mit:

git clone https://github.com/adafruit/pi_video_looper.git

und wie gewohnt mit:

sudo ./install.sh

installiert.

die Konfigurationsdatei liegt in /boot und wird mit:

sudo nano /boot/video_looper.ini

angepasst. Nach einer Änderung muss erfreulicherweise nicht mehr neu installiert werden, sondern die Änderungen greifen direkt. Die Sortierung kann von alphabetisch auf random geändert werden. Nach einem Neustart wird bei konfiguriertem USB-stick zum Aufstecken des stick aufgefordert, falls noch nicht geschehen. Die Titel werden indiziert und nach einer einstellbaren Wartezeit abgespielt.

mit ein paar scripten im Ordner ~/pi_video_looper kann der player enabled oder disabled werden sowie die Titel neu geladen werden, so dass man auch parallel zu einer iRadio/iTV-Installation mit dem looper experimentieren kann.

sudo ./enable.sh

sudo ./disable.sh

sudo ./reload.sh

das ein oder andere wird noch zu entdecken sein.

In meinem Demonstationsvideo spiele ich ein paar Titel nur kurz an (Urheberrecht) und führe dann am PC per SSH das reload-script aus.

fbcp-ili9341
 

im zweiten Abschnitt dieses Berichtes geht es um die Darstellung der Kassettensimulation auf einem kleinen SPI-Display und die passende Skalierung.

Der von Adafruit benutzte omxplayer ist zwar parametrierbar um ein SPI-Display anzusprechen, dies ist mir aber vom Video Looper aus nicht gelungen und ich gehe davon aus dass der Looper nur über HDMI ausgeben kann.

Da im Linux-Kernel 5 framebuffer nicht mehr unterstützt wird suchte ich eine Alternative. Und die heißt fbcp-ili9341.

die git-Seite des Projektes:

fbcp-ili9341

Das display an sich wäre mit LCD-show schnell installiert. Aber wir brauchen ja eine Spiegelung des HDMI Monitors auf das SPI-Display.

Die Einrichtung von fbcp-ili9341 geschieht folgendermaßen:

erst müssen wir den verwendeten Chipsatz recherchieren. Es handelt sich im Beispiel um dieses Modul:
 

Auf dieser Seite wurde ich fündig:

Raspberry Pi Stack Exchange

wir wissen nun daß es sich hier um einen ili9486 chip handelt.

Entsprechend den Anweisungen bei git installieren wir nun erst mal die Grundsoftware fbcp-ili9341:

sudo apt-get install cmake
cd ~
git clone https://github.com/juj/fbcp-ili9341.git
cd fbcp-ili9341
mkdir build
cd build


dann bauen wir uns die cmake Parameter zusammen

cmake -DSPI_BUS_CLOCK_DIVISOR=40 -DWAVESHARE35B_ILI9486=ON -DUSE_DMA_TRANSFERS=OFF ..

Das Leerzeichen und die 2 Punkte am Ende des strings sind wichtig und gehören dazu. Der divisor von 40 ist evtl. recht hoch gewählt. Wir könnten später mit kleineren Werten optimieren. Den DMA-Transfer musste ich aber abschalten, sonst fror die Wiedergabe auf dem SPI-Display ein.

nach dem Ausführen der cmake Anweisung geht es weiter mit:

make -j

lt. Anleitung kann der Treiber nun mit:

sudo ./fbcp-ili9341

erst mal testweise gestartet werden. Bei mir erschien aber kein Inhalt auf dem display. Erst als ich den Aufruf in die rc.local eingebunden habe:

sudo /home/pi/fbcp-ili9341/build/fbcp-ili9341 &

für meine Kassettensimulation muss ich die Bildschirmskalierung aufheben. Um neue Parameter einzugeben wird der fbcp-Dienst mit sudo pkill fbcp beendet. Jetzt kann cmake mit den geänderten Parametern wieder ausgeführt werden, danach wieder make -j ausführen und unser Treiber kann per reboot wieder gestartet werden.

cmake -DSPI_BUS_CLOCK_DIVISOR=40 -DWAVESHARE35B_ILI9486=ON -DUSE_DMA_TRANSFERS=OFF -DDISPLAY_CROPPED_INSTEAD_OF_SCALING=ON ..

Jetzt haben wir nur noch einen Bildschirmausschnitt, der vom Massstab her aber etwas zu groß geraten ist. Abhilfe schaffen wir durch Änderung der HDMI-Auflösung mit sudo raspi-config.


hier mit 640x480. Die Skalierung ist jetzt etwas zu klein.

Besser sieht es aus mit 720x480:


 

Jetzt schalten wir noch die Bildschirm-Statistik ab, weil sie störend ist.

der komplette string sieht jetzt so aus:

cmake -DSPI_BUS_CLOCK_DIVISOR=40 -DWAVESHARE35B_ILI9486=ON -DUSE_DMA_TRANSFERS=OFF -DDISPLAY_BREAK_ASPECT_RATIO_WHEN_SCALING=ON -DSTATISTICS=0 ..

Die Größenverhältnisse sind jetzt realistisch und das Display kann in ein Kassetttenfach eingebaut werden.

ich habe noch eine weitere Anleitung gefunden:
SPI TFT LCD - Kernel 5

PS: Andere Displays, andere OS-Versionen oder andere Video-Auflösungen können ganz andere Einstellparameter notwendig machen
 


Keine Kommentare:

Kommentar veröffentlichen