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 looked like:
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 XBMC.
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 Library).
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 (see Media Sources).
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 repository.
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 didn’t work.
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 xbmc.log:
ERROR: Error Type: <type 'exceptions.AttributeError'> 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 <module> 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 Keyboard.
There are also hundreds of XBMC plugins I haven’t checked out yet, as well as other ways to customize XBMC.