Building XBMC voor Raspbmc

Door kraades op dinsdag 4 september 2012 00:30 - Reacties (6)
CategorieŽn: Raspberry Pi, Raspbmc, Views: 7.940

Ik kwam erachter dat op dit moment er geen DVD/IFO support aanwezig is in de XBMC build. Om dit aan te zetten moet de onderstaande code in xbmc/cores/omxplayer/OMXPlayer.cpp worden verwijderd. Hierna moet XBMC opnieuw worden gecompileerd en op de RaspPi worden gezet.

code:
1
2
3
4
5
6
if (m_pInputStream && ( m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD)
                       || m_pInputStream->IsStreamType(DVDSTREAM_TYPE_BLURAY) ) )
  {
    CLog::Log(LOGINFO, "COMXPlayer::OpenInputStream - DVD/BD not supported");
    return false;
  }


Je hebt een Linux installatie nodig. Ik heb zelf een bootable USB stick gemaakt met Ubuntu 12.04 Desktop 32-bit. Hoe dit moet staat hier beschreven.

Boot vanaf de USB stick.

Zorg dat je een netwerkverbinding hebt. Maak bijvoorbeeld een wireless verbinding door rechtsboven op het Wireless icon te klikken.

Start een Terminal sessie. Zoek deze eventueel via "Dash Home" (linksboven).

Referenties:Mochten er paden of iets dergelijks niet kloppen dan is het raadzaam om bovengenoemde referenties even na te lopen.

Start een root sessie en maak het build file system:
(let op dat je altijd het laatste build file system gebruikt)

ubuntu@ubuntu:~$ sudo su -
root@ubuntu:~# wget http://download.raspbmc.com/downloads/source/filesystem/buildfs-bcm_rootfs-raspbmc-i386_cross_r2-hardfp.tar.gz
root@ubuntu:~# mkdir ./buildfs
root@ubuntu:~# tar -xzf buildfs-bcm_rootfs-raspbmc* -C ./buildfs

Fix het netwerk:

root@ubuntu:~# cp /etc/network/interfaces ./buildfs/etc/network/interfaces
root@ubuntu:~# cp /etc/resolv.conf ./buildfs/etc/resolv.conf

Mount:

root@ubuntu:~# mount proc -t proc ./buildfs/proc
root@ubuntu:~# mount --bind /dev ./buildfs/dev

Git clone XBMC:
(als alternatief kun je ook hier downloaden)

root@ubuntu:~# cd ./buildfs
root@ubuntu:~/buildfs# apt-get install git
root@ubuntu:~/buildfs# git clone https://github.com/xbmc/xbmc
root@ubuntu:~/buildfs# cd

Voorbereiden van de omgeving:

root@ubuntu:~# chroot ./buildfs
root@ubuntu:/# apt-get update
root@ubuntu:/# apt-get install libgtk2.0-bin
root@ubuntu:/# export LANG=C

Patch en build XBMC:

root@ubuntu:/# cd xbmc
root@ubuntu:/xbmc# PATCHES="advancedsettings.patch
> depends.patch
> rssfeeds.patch
> setup-sdk.patch
> skin.patch"
root@ubuntu:/xbmc# for patch in $PATCHES
> do
>   wget http://svn.stmlabs.com/svn/raspbmc/patches/XBMC-hardfp/$patch
>   patch -p1 < $patch
>   rm $patch
> done
root@ubuntu:/xbmc# sh ./tools/rbp/setup-sdk.sh 
root@ubuntu:/xbmc# make -C ./tools/rbp/depends/xbmc
root@ubuntu:/xbmc# make -j 2
root@ubuntu:/xbmc# make install

Maak de XBMC tarball:

root@ubuntu:/xbmc# wget http://svn.stmlabs.com/svn/raspbmc/patches/nightly_scripts/create_tarball.sh
root@ubuntu:/xbmc# sh create_tarball.sh
root@ubuntu:/xbmc# cd

Kopieer de XBMC tarball naar de RaspPi en exit:
(waarbij 192.168.0.123 het IP-adres van de RaspPi is)

root@ubuntu:/# scp /opt/xbmc-rbp*.tar.gz pi@192.168.0.123:/home/pi
pi@192.168.0.123's password: raspberry
root@ubuntu:/# exit
exit
root@ubuntu:~# exit
logout
ubuntu@ubuntu:~$

Voer hierna op de RaspPi het volgende uit:

ubuntu@ubuntu:~$ ssh pi@192.168.0.123
pi@192.168.0.123's password: raspberry
pi@raspbmc:~$ sudo su -
root@raspbmc:~# initctl stop xbmc
root@raspbmc:~# tar -xzf /home/pi/xbmc-rbp*.tar.gz -C /opt
root@raspbmc:~# initctl start xbmc
root@raspbmc:~# exit
logout
pi@raspbmc:~$ exit
Connection to 192.168.0.123 closed.
ubuntu@ubuntu:~$

Herstart de RaspPi en controleer bij XBMC settings op je de nieuwe build draait.

In onderstaand geval is de build dus van 2 September 2012:

http://img18.imageshack.us/img18/6824/compilet.jpg

Raspberry Pi als XBMC media speler met Raspbmc

Door kraades op zaterdag 14 juli 2012 22:16 - Reacties (51)
CategorieŽn: Raspberry Pi, Raspbmc, Views: 36.802

Vandaag dan eindelijk de Raspberry Pi ontvangen van Farnell! Inclusief gratis T-shirt... De RaspPi is besteld op 11 mei en vandaag 14 juli heb ik 'm dan eindelijk in huis. _/-\o_

Het is de bedoeling dat de RaspPi gebruikt gaat worden als XBMC mediaspeler bij mijn ouders. Omdat ze geen NAS of iets dergelijks hebben komt er direct een USB disk aan te hangen.

Hardware:
  • Raspberry Pi :)
  • Micro USB voeding 5V/1000 mA
  • SD kaart: Kingston 8GB SDHC class 10 (SD10V/8GB)
  • USB 3.0 disk: Western Digital My Passport Essential 500 GB
  • USB 3.0 data/voeding kabel
  • Netwerk kabel
  • HDMI kabel
Omdat er best veel problemen zijn met class 10 SD kaartjes heb ik expres een werkende SD kaart uitgezocht op http://elinux.org/RPi_VerifiedPeripherals.

De USB 3.0 data/voeding kabel is nodig omdat de disk 500 mA nodig heeft en de USB aansluiting op de RaspPi slechts 150 mA levert. Deze kabel is ook wel bekend als een Y-kabel.

Het is een USB 3.0 kabel omdat de disk toevallig een USB 3.0 aansluiting heeft. Dit heeft verder niets te maken met de RaspPi zelf.

http://img440.imageshack.us/img440/1238/pi4r.jpg

De USB kabel onderaan in het plaatje wordt op een USB poort van de TV aangesloten die 500 mA levert. Zodoende heeft de USB disk voldoende stroom om te kunnen functioneren / op te spinnen.

Software:
  • Raspbmc
De eerst stap is het prepareren van de SD kaart. Hiervoor heb je een computer en een SD kaart lezer nodig. :)

Via http://www.raspbmc.com/download/ kun je de installer downloaden. In mijn geval heb ik de installatie vanuit Windows 7 uitgevoerd. De installatie is een kwestie van het juiste device kiezen en een paar minuten wachten.

http://img593.imageshack.us/img593/784/pi1j.jpg

Hierna de SD card in de RaspPi stoppen en de RaspPi via HDMI aansluiten op de TV. De RaspPi aansluiten op het netwerk en vervolgens op het stroomnet en de RaspPi start op.

De installatie start dan op waarbij de netwerkverbinding nodig is. Ik heb ervoor gekozen om de RaspPi eerst te installeren zonder USB disk met je kunt alles ook in ťťn keer aansluiten.

De installatie is geheel automatisch en duurt ongeveer 25 minuten.

http://img593.imageshack.us/img593/5600/pi2xo.jpg

Aan het einde van de installatie wordt XBMC automatisch opgestart.

http://img815.imageshack.us/img815/7687/pi3gu.jpg

Er blijkt een XBMC 12.0-prealpha versie geinstalleerd te zijn. Ik ben gewend aan XBMC 11.0 Eden en was eerlijk gezegd een beetje teleurgesteld over hoe het eruit ziet. De achtergrond vind ik niet bijzonder (wat is er mis met de bioscoopzaal?) en de icons zijn groter dan gebruikelijk?
(zal allemaal wel ergens in te stellen zijn hoop ik...)

Mijn TV (Philips 47PFL9732D) ondersteunt wel HDMI-CEC (toen heette het nog HDMI Control i.p.v. EasyLink) maar helaas kon ik dit niet gebruiken. Daarom was het niet mogelijk om de afstandsbediening van de TV te gebruiken om XBMC te bedienen. Hopelijk functioneert het in combinatie met de nieuwere TV (Philips 42PFL4007H) van mijn ouders wel.

Ook een USB toetsenbord deed het niet door gebrek aan power? Geen powered USB hub aanwezig dus het toetsenbord kon ik niet gebruiken.

Als laatste optie zou een iPad app als xbmcRemote soelaas moeten bieden maar helaas staat de XBMC web server standaard UIT. En via de XBMC interface kon ik het niet aanzetten. 8)7

Via de router is het IP-adres van de RaspPi te achterhalen. Hierna kun je met SSH verbinding maken met username is "pi" en password is "raspberry". Op Windows kun je hiervoor bijvoorbeeld de terminal emulator PuTTY gebruiken.

Ook gelijk maar een statisch IP-adres toegekend door op de router het MAC-adres te koppelen aan een IP-adres. Het MAC adres kun je achterhalen met het command ifconfig. Op de RaspPi moet je voor dit soort commando's er wel sudo voor zetten dus sudo ifconfig.

De XBMC folder is /home/pi/.xbmc. In /home/pi/.xbmc/userdata/guisettings kun je de webserver aanzetten.

<webserver>true</webserver>

Gebruik hiervoor nano dat standaard aanwezig is (vi is niet aanwezig).

Hierna XBMC herstarten met:

pi@raspbmc:~$ sudo initctl stop xbmc
xbmc stop/waiting
pi@raspbmc:~$ sudo initctl start xbmc
xbmc start/running, process 775
pi@raspbmc:~$

Hierna kun je met bijvoorbeeld xbmcRemote XBMC bedienen.

Zodra je de USB disk aansluit wordt deze herkend.

Met fdisk kun je een lijst opvragen. In mijn geval is de USB disk beschikbaar als /dev/sda.

pi@raspbmc:~$ sudo fdisk -l

Disk /dev/mmcblk0: 7969 MB, 7969177600 bytes
4 heads, 16 sectors/track, 243200 cylinders
Units = cylinders of 64 * 512 = 32768 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000cad06

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1              33        2080       65536    c  W95 FAT32 (LBA)
Partition 1 does not end on cylinder boundary.
/dev/mmcblk0p2            2081        6016      125952   82  Linux swap / Solaris
Partition 2 does not end on cylinder boundary.
/dev/mmcblk0p3            6017      243200     7589888   83  Linux
Partition 3 does not end on cylinder boundary.

Disk /dev/sda: 500.1 GB, 500074283008 bytes
255 heads, 63 sectors/track, 60797 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00038a56

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1       60797   488351871   83  Linux
pi@raspbmc:~$

Ik heb ervoor gekozen om de disk te formatteren als ext4 omdat dit in dit geval de minste overhead geeft.

pi@raspbmc:~$ sudo mkfs.ext4 /dev/sda1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
30523392 inodes, 122087967 blocks
6104398 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
3726 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
pi@raspbmc:~$

Hierna de RaspPi rebooten zodat de USB disk automatisch wordt gemount.

pi@raspbmc:~$ sudo shutdown -r now
pi@raspbmc:/media/usb0$ Broadcast message from pi@raspbmc
        (/dev/pts/0) at 18:18 ...

The system is going down for reboot NOW!

Helaas wordt de USB disk niet automatisch gemount en moet je dit nog handmatig doen. Dit lijkt een bekend probleem te zijn in Raspbmc RC3.

pi@raspbmc:~$ sudo mount /dev/sda1 /media/usb
pi@raspbmc:~$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mmcblk0p3        7.2G  588M  6.2G   9% /
/dev/mmcblk0p1        7.2G  588M  6.2G   9% /boot
/dev/sda1             459G  8.2G  427G   2% /media/usb0
pi@raspbmc:~$

Met FTP kun je de RaspPi benaderen en files/media overzetten.

Ik heb met de volgende film getest. De film is 1080p H.264 met DTS.

pi@raspbmc:~$ ls -lh /media/usb/Media/Video/Movies/Alice\ In\ Wonderland/
total 8.0G
-rwxr-xr-x 1 root root 8.0G Jul 14 18:39 Alice.In.Wonderland.2010_1080p.DTS.X264_R_KNORLOADING.mkv
pi@raspbmc:~$

De film speelt soepel af zolang je maar niets anders doet met de Pi. Ik vind dat best een prestatie!

Ik ga er dan ook van uit dat 720p en AC3 ook zonder problemen zal werken. De oude DVD's zullen ondanks de lage SD kwaliteit niet gaat werken i.v.m. ontbrekende licenties. Dus die moeten worden omgezet met bijvoorbeeld HandBrake naar H.264.

Wat mij verbaasde is dat de RaspPi ook opstart met alleen de USB voeding van de USB disk en dus zonder de Micro USB voeding. Dit zou eigenlijk maar 500 mA moeten zijn net genoeg voor alleen de USB disk. Ik zou niet weten hoe ik het anders moet aansluiten dus ik neem aan dat het verder geen kwaad kan maar raar is het wel.

Het is jammer dat HDMI-CEC niet werkte zodat ik de iPad/iPhone app xbmcRemote moest gebruiken. Ik vraag mij af hoe je dit het beste kunt debuggen. Op de RaspPi draait in ieder geval een process rpi-cecd die wel ergens een log file zal schrijven.

Voor het niet automatisch mounten van de USB disk zal best wel een workaround zijn te vinden. Hopelijk is dit in de final build opgelost hoewel de meeste onder ons gebruik maken van remote opslag van de media (NAS).

De volgende stap is om mij te verdiepen in de instellingen. Hierover later meer...