XBMC Frodo Buildroot for Raspberry Pi

I've recently upgraded my dodgy Samsung DLNA + minidlna setup to XBMC. XBMC is a media center, and IMHO it's the best one.

It's pretty obvious also from the number of Raspbery Pi XBMC kits on the internet, that the Raspbery Pi is a popular option given the price and low power consumption.

I've recently started using XBMC daily on a Raspberry Pi, and I'm pretty happy with the performance. As most people working with the Pi know, capacity constraints are everywhere. I can happily say that despite the considerable constraints on the Pi, I've got it running quite nicely. Here's a few things I did that made a significant performance improvement.


Cut down OS


Rather than running one of the more popular distros, like Rasbmc, or OpenELEC, I've set up a simple Buildroot based on this repo and have updated/cleaned up the XBMC packages to install XBMC Frodo. Not having any superfluous daemons or other software running in the background allows XBMC to take advantage of all of the hardware available on the Pi.

You can take a look at my repo, including required packages and configs, here.


Overclock slightly


I'm running my Pi using the following overclocking settings in config.txt

arm_freq=1000
core_freq=500
sdram_freq=500
over_voltage=6

Compile with optimisations


The buildroot I've linked earlier in this post already is configured to do this, but optimising compiled code specifically for the Pi's CPU seems to give a little performance boost. It's free, so why not. The flags (CFLAGS & CXXFLAGS) I use are -pipe -mhard-float -march=armv6 -mtune=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -ffast-math -O3


MySQL Library


Running with the inbuilt SQLite library is very hard on the Pi I've found, so migrating to MySQL shared library on another machine really helped to speed up the menu responsiveness. It's also let me do library updates from my file server using a headless install of XBMC, as the XBMC on the fileserver and the Pi shared the same media database.

Instructions are here. Basically you need to set up MySQL on another system, and configure your advancedsettings.xml as such:

 <advancedsettings>
  <videodatabase>
    <type>mysql</type>
    <host>ip of server</host>
    <port>3306</port>
    <user>username</user>
    <pass>password</pass>
  </videodatabase>

  <musicdatabase>
    <type>mysql</type>
    <host>ip of server</host>
    <port>3306</port>
    <user>username</user>
    <pass>password</pass>
  </musicdatabase>
</advancedsettings>

Restrict your GUI quality


You can limit the quality of your GUI to 720p without effecting playback quality of 1080p videos. I've found this also really helps the responsiveness of the GUI. In your guisettings.xml, put:

  <limitgui>720</limitgui>

Disable actor thumbnails


XBMC can download photos of all of the actors in a specific TV show or movie. I never, ever use this, and it slows down the menus and scanning process, so I disable it. In your guisettings.xml:

  <actorthumbs>false</actorthumbs>

Don't scan for media on the Pi


The is the thing that makes the most difference, in my opinion. Especially if you have a large library. Scanning your media across NFS/CIFS or even a USB hard drive is really slow on the Pi, and bogs down the GUI really heavily (remember, single core CPU). If you've got the MySQL library option set up, and you media is accessible via the same path on your file server and Pi (hint: use NFS and mount your videos under the same folder structure that exists on your file server) you can run XBMC on your file server and do the scanning there. If you don't have a GUI on your file server, you can run it headless using something like this (reasonably complicated to set up).