Tag Archives: crosscompiler

How To: 1080p Videos mit dem Raspberry Pi abspielen

In diesem Artikel wird erklärt, wie mit dem Raspberry Pi h264-codierte Videos mit einer Auflösung von 1920×1080 Pixeln (aka. FullHD / 1080p) abgespielt werden können.

“Installation” von Archlinux

Da ich inzwischen auf dem Laptop Archlinux einsetze und dort relativ zufrieden bin, habe ich mich gegen Debian entschieden und verwende stattdessen lieber die Archlinux Distribution für den Pi. Das Image kann man auf der offiziellen Downloadseite per Torrent oder http herunterladen. Anschließend kopiert man das Image einfach auf eine SD-Karte. Hierfür habe ich eine einfache 2GB SD-Karte verwendet. Kopiert wird mittels dd:

# dd if=archlinuxarm-29-04-2012.img of=/dev/sdX bs=4M oflag=sync

Wobei X der dem Buchstaben des Blockdevices unter dem die SD-Karte erreichbar ist entspricht. Falls man sich bezüglich des Buchstabens unsicher ist, kann nachdem die SD-Karte an den Computer angeschlosse wurde mit $ dmesg der Nachrichtenbuffer des Kernels ausgegeben werden. Hier sollte am Ende der Ausgabe etwas wie:
[ 2700.131623] sd 10:0:0:0: [sdf] 3862528 512-byte logical blocks: (1.97 GB/1.84 GiB)
[ 2700.132608] sd 10:0:0:0: [sdf] Assuming drive cache: write through
[ 2700.134458] sd 10:0:0:0: [sdf] Assuming drive cache: write through
[ 2700.134462] sdf: sdf1 sdf2
[ 2700.406247] EXT4-fs (sdf2): mounted filesystem with ordered data mode

zu finden sein. In diesem Falle wäre X also f. Zur weiteren Kontrolle kann mit $ mount noch kontrolliert werden, ob /dev/sdf1 wirklich der ersten Partition der SD-Karte entspricht. Bevor man mit dd das Image auf die Karte schiebt müssen alle gemounteten Partition der SD-Karte geunmounted werden (z.B. # umount /dev/sdf1), da sonst dd ansonsten mit einer Fehlermeldung beendet.
Auf die Option oflag=sync möchte ich hier noch mit einem Satz eingehen, da ich sie erst vor kurzem in einem von Gambarus tollen Beiträgen entdeckt habe: Sie bewirkt, dass jeder Block mit Nullen aufgefüllt wird, wenn er nicht komplett mit Daten beschrieben werden kann.
Nachdem das Image auf der SD-Karte ist, kann man die SD-Karte und alle notwendigen Kabel (HDMI, LAN, evtl. Maus und Tastatur und am Schluss Strom) in den Pi stecken, der daraufhin startet.
Anschließend kann entweder per SSH oder direkt am Pi gearbeitet werden.

Installation des omxplayers

Anstatt des mplayers oder vlc sollte man den omxplayer verwenden, da dieser die GPU des Pis ausnutzt! Der omxplayer wurde freundlicherweise von spenning aus dem Raspberry Pi Forum schon crosscompiliert, was die Sache relativ einfach macht. Wer selbst compiliert, kann sich unter Debian/Ubuntu das Paket gcc-arm-linux-gnueabi installieren, um den passenden Compiler zu bekommen. Dieses Paket ist für ältere Ubuntu/Debian-Versionen wie z.B. der letzten LTS Version 10.04 nur über ein separates PPA-Repository zu erhalten.

Folgende Befehle werden auf dem Pi ausgeführt:
Herunterladen:

# wget http://seyrsnys.myzen.co.uk/rpi/omxplayer-bin.tar.xz

Entpacken:

# tar -xf omxplayer-bin.tar.xz

Nach dem Entpacken sollte der Ordner usr aus dem entstandenen Verzeichnis omxplayer nach / kopiert werden. Hierdurch kopiert man die Binaries und Dokumentation an die richtige Stelle.

# cp -r omxplayer/usr/ /

Der omxplayer benötigt das Paket libva um richtig zu funktionieren. Um dies zu installieren reicht ein einfaches:

# pacman -S libva

Sollte die Installation fehlschlagen (wie bei mir), empfiehlt es sich erst ein Upgrade auszuführen:

# pacman -Syu

Wichtig: Falls man gefragt wird, ob zuerst pacman geupgraded werden soll, dies mit Nein beantworten, da ansonsten das Update nicht richtig durchläuft.

Wiedergabetest

Als Testfilm habe ich den freien Kurzfilm Big Buck Bunny verwendet, den man sich mit

# wget http://mirrorblender.top-ix.org/peach/bigbuckbunny_movies/big_buck_bunny_1080p_h264.mov

herunterladen kann (ca. 700MB).
Anschließen kann man den Film mit

# omxplayer -o hdmi big_buck_bunny_1080p_h264.mov

ruckelfrei und mit Ton über HDMI abspielen. Wird die Option -o hdmi nicht mit angegeben, wird der Ton über die 3,5mm Klinkenbuchse auf dem Board ausgegeben.
Der omxplayer besitzt zwar keine Man-Page aber eine kleine Dokumentation unter /usr/share/doc/omxplayer/README