For the last years I’ve been using different home theater PCs, mainly for TV reception and videos. The first edition was just a standard desktop computer in a somewhat custom case running some self-made software. My setup gradually improved over time: It ran VDR, it learned to love and hate MythTV, and to appreciate XBMC. It saw the advent of Atom processors and low-noise barebones, it survived the first wrecked SATA flash drives and got revamped with WD Green Caviar hard disks. Analog capture cards were replaced by full-featured cards and finally by USB DVB receivers. My most recent setup consisted of:

The device was connected via HDMI to my TV, and via S/PDIF (Toslink) to my amp. On the software side it ran Ubuntu 12.10, on top of that Tvheadend for TV reception, and XBMC (Gotham beta) for media playback. Since Ubuntu 12.10 isn’t the newest kid on the block, and since I wanted to tinker with something new, I decided it was time for another revamp.

Time for a new round

The setup described above setup worked nicely for the last two and a half years, with small hiccups here and there. But after all there were three things about that PC that bothered me:

  • Fan noise. The ZBOX ID42 fan is barely audible, once you tune some settings in the board’s BIOS. But for audiophiles like me, even the lowest noise can be annoying.
  • Power consumption. The PC (not including HDDs) drew ~35W of power in standby mode, going up to ~40W while playing video. This amounts to ~80 EUR of electricity costs per year.
  • A single box that does everything. I had to keep the PC near the TV (in a media rack, but nonetheless), including the DVB-S2 receivers, the hard disks, and lots of cables.

The last point was what made me think: How cool would it be if I could split up the system into two separate components: One “receiver” running Tvheadend, doing all the DVB-S2, recording, and storage stuff. And one or more “players” running XBMC/Kodi, playing media on my TVs. On the software side I was all set up: Tvheadend and XBMC were already separated software components, I just needed the right hardware. I owned a Raspberry Pi from the first batch and watched the single-board computer area ever since, so I focused on single-board computers from the very beginning. They offer great value for money and are energy efficient. The first Pi generation was obviously not fast and flexible enough to play a role in my new stack, so I took a look around for other boards. And that’s where my journey began.

Single-board computers FTW!

I started with a Hummingboard i2eX. The board comes at a slightly higher price (~ 110 EUR), but has much more computing power compared to the first generation Pi. It also has an onboard Toslink connector, which is nice to connect my amp. But although the specs seemed to be OK, and the board was officially supported by the well-renowned Kodi distribution OpenELEC, it had problems deinterlacing 1080i/50 TV channels properly. This was in December 2014, and i.MX6 support in Kodi has improved sine then, but nonetheless the board didn’t meet my requirements.

The next board I tried was a Banana Pi. The Banana Pi received some great PR during its launch, and it seemed to fit just right for my purposes. But as with the hummingboard, the devil is in the details. The Banana Pi had some strange USB performance issues, and it was unable to decode more than one HD channel at a time. Besides that, the onboard LEDs were so extremely bright, they could be seen through my closed media rack door (I’m exaggerating here).

The third try was an Amazon Fire TV. The Fire TV runs Android, and you can install Kodi onto it (via adb sideload). Overall, it is a nice device to be used with Instant Video, as it is neatly integrated into the UI. But Android apps like Kodi that are not installed via the official Amazon store have to be started via deeply hidden menus or obscure workarounds. And on top of that, Kodi’s deinterlacer and scaler didn’t look as nice as on other devices. I kept the Fire TV, but mainly for Instant Video (and Hill Climb Racing, of course), and because the wife liked it.

After a long journey, lots of tinkering, numerous kerne build, and great frustration, I finally found two single-board computers that fit all my needs.

Happy end…

On the receiver side I settled with an ODROID-C1. The ODROID-C1 is a quad-core micro computer running at 1.5 GHz, with 1GB RAM (which is plenty for my purposes), Gigabit Ethernet, and 5 USB ports. The board has enough power to decode at least three 1080i/50 TV channels simultaneously, all the while recording some of them to my hard disks, and streaming content over the network. The board’s USB ports are occpuied by my two DVB-S2 receivers, two hard disks and a general purpose FT232 USB-Serial device doing… stuff. It runs the latest version of Ubuntu 14.04 LTS, Tvheadend, a client software for that FT232 device, and an NFS server. I also tried to use it as a media player, but unfortunately it has problems doing CEC properly, due to PCB design failures.

On the player side I use the brand new Raspberry Pi 2 Model B. It has a slower CPU compared to the ODROID-C1, if you’re not overclocking it. But it is something like the reference platform for OpenELEC. Playback is fine in all constellations, be it low-bitrate 576i/50 TV channels, high-bitrate 1080i/50 TV channels (with deinterlacing enabled), or even 1080p movies. The UI is a little sluggish while playing video, but nothing to be concerned about. The 100 Mbit ethernet port is more than enough, and it is even possible to connect it via wifi. CEC is working fine, so I can control it with my TV remote.

…with some down sides

The biggest disadvantage compared to my prior setup is definitely the missing S/PDIF audio output. My amp has HDMI input and output for video, but it can’t extract the HDMI audio signal. It has S/PDIF inputs though via a coax and two Toslink connectors. So my Raspberry Pi 2 outputs audio via HDMI to my TV from where I run a Toslink cable back to my amp. Not perfect, but it works. Downside is that I can’t play audio if the TV is off. I “solved” that problem by using an additional 3.5mm cable connecting the Pi’s analog audio output with one of my amp’s analog inputs. For purposes like music or radio listening, this is more than enough for me.

What did I gain?

There’s of course some technical advantage to my prior system. Due to the use of two separate devices, I could theoretically put the player next to the TV (remember, no noise!) and deploy the receiver with its noisy hard disks somewhere remote, like a different room or even a different floor. Everything is connected via my home network, so no need to run special cables all around the house. As I said earlier, it’s even possible to connect the player part via wifi if needed.

In addition, the system scales nicely beyond two players. All it takes is enough bandwith on your home network (Gigabit ethernet on the ODROID should be fine for ~8 simultaneous streams) and enough DVB-S2 receivers for concurrent channel reception. And last but not least, both devices have a low power consumption, which can hopefully be seen on my next electricity bill.

But the most important thing I gained during this project was the feeling every hacker knows: That you achieved something with your own hands and skills. Maybe I paid more for all my components than I’d pay for an average TV receiver. And maybe I invested way more time than it takes to go to Amazon and just buy a Dreambox. But hell yeah, it wouldn’t have been half the fun.