Setting up a Zotac ZBOX with XBMC as a home theater PC

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.

I asked around for recommendations, and several of my coworkers
recommended Zotac. After looking through their
options, I decided on a Zotac ZBOX
ID41

(here it is on
Amazon).

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:

{.alignnone
.size-medium .wp-image-22442 width="300"
height="179"}

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.

Uploading media

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.

Hulu

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: 
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.

Next Steps

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.

Paul Gross

Paul Gross

I'm a lead software developer in Seattle working for Braintree Payments.

Read More