I have wanted a Home theater
PC for awhile to play
movies, music, Hulu, and more through my TV. I
thought briefly about buying a prebuilt device (like a
Roku), but I decided to hack one together
myself. My main motivation was flexibility and the fact that I like to
tinker. Furthermore, I wanted a device with a hard drive that I could
load up with files and play directly to a TV.
Setting up Ubuntu
I decided to run Ubuntu 11.10 Oneiric
Ocelot for the operating system.
The Zotac ZBOX has no CD drive, so I downloaded the Ubuntu ISO from the
website, and I used UNetbootin to
make a bootable USB drive.
I plugged an HDMI cable from the Zotac into my TV, and I plugged a wired
USB keyboard and mouse in the Zotac. I inserted the USB drive and booted
it up. It automatically booted from the drive, and I selected Install.
Once the installation was finished, I had to go to Settings -> Sound
and choose the HDMI output. Then, sound correctly played through my TV.
Setting up XMBC
There is a lot of software for home theater PCs. I chose
XBMC since it seems very polished and has a lot of
plugins for different video sources (such as
Youtube). It’s also optimized for a remote
instead of requiring a full keyboard.
I had to add an extra apt repository in order to install the latest
version of XMBC (11.0 beta1). Here are the commands I ran:
sudo add-apt-repository ppa:nathan-renniewaldock/xbmc-stable sudo apt-get update sudo apt-get install xbmc
Then, I launched XBMC from Ubuntu. I was greeted with a screen that
I went to Settings and changed my region to where I live. I also told
XBMC to update my library on start. Then, I went to Weather and entered
my zip code to get local weather. Next I went to Videos -> Add ons
and installed a bunch of video add ons (such as Youtube, HGTV, etc).
At this point, I had to manually run XBMC whenever I restarted the
computer. There are many strategies to boot directly into XBMC. I
decided to just add XBMC as a Startup Item in Ubuntu. I also allowed
Ubuntu to boot without a password. So Ubuntu boots up and then runs XBMC
when it’s finished. If I need to go back to Ubuntu, I can just exit from
XMBC uses filenames to figure out which movie or TV show a file
represents. For example, with default settings, episodes of a TV show
need to be named in one of the following formats:
foo.s01e01.* foo.s01.e01.* foo.s01_e01.* foo_[s01]_[e01]_* foo.1x01.* foo.101.*
These files should be in a folder with the name of the show. The full
set of instructions can be found on the XBMC website at TV Shows (Video
I created a Movies directory and a TV Shows directory under
/home/paul/Videos and uploaded my media. Then, I added these directories
to XMBC and set the content type to Movies and TV Shows respectively
Finally, I quit XBMC and restarted it. It scanned my directories and
added the movies and TV shows to the library.
Unfortunately, there are no officially supported Hulu plugins for XBMC.
I managed to get an unoffical plugin working with some extra effort
using Bluecop’s beta video plugin
I downloaded the zip file from the site above and saved it to the Zotac.
Then, in XBMC, I went to Settings -> Add ons and chose to install add
ons from a zip file. At this point, the Hulu plugin appeared in the list
of available plugins to install. I installed the plugin, but it still
By looking in the XBMC log (~/.xbmc/temp/xbmc.log), I discovered that
Hulu requires a newer version of
rtmpdump than Ubuntu ships with.
I built the latest rtmpdump from source with the following commands:
sudo apt-get install libssl-dev git clone git://git.ffmpeg.org/rtmpdump cd rtmpdump make sys=posix cp librtmp/librtmp.so.0 /usr/lib/i386-linux-gnu/librtmp.so.0
The last step copies the new librtmp on top of the existing one, which
isn’t great. Unfortunately, XBMC runs with a specified library path, so
I couldn’t find an easy way to add a different directory to the path.
Now, Hulu works. Unfortunately, I have to browse for videos to play. If
I search for a video, and then play it, I get the following error in the
ERROR: Error Type: ERROR: Error Contents: _Info instance has no attribute 'videoid' ERROR: Traceback (most recent call last): File "/home/paul/.xbmc/addons/plugin.video.hulu/default.py", line 56, in modes ( ) File "/home/paul/.xbmc/addons/plugin.video.hulu/default.py", line 36, in modes stream_media.Main() File "/home/paul/.xbmc/addons/plugin.video.hulu/resources/lib/stream_hulu.py", line 148, in __init__ self.queueAD(video_id,2,1) File "/home/paul/.xbmc/addons/plugin.video.hulu/resources/lib/stream_hulu.py", line 420, in queueAD u += '&videoid="'+urllib.quote_plus(common.args.videoid)+'"' AttributeError: _Info instance has no attribute 'videoid'
Browsing works just fine, though, so I only browse for videos.
I’m still using a wired USB keyboard and mouse, but I’m planning to get
a home theater friendly wireless keyboard/mouse combo. Something along
the lines of a Rii Mini Wireless
There are also hundreds of XBMC plugins I haven’t checked out yet, as
well as other ways to customize XBMC.