For a year or so now, I have been thinking about setting up some sort of media center for my home theater. After looking at a few different options, I decided to try setting up my Xbox 360 as my media center hub while I was on vacation the past few days. Read on to see how everything worked out.
My ideal solution to my media center "problem" had to solve these problems:
1) Ripping of all of my DVDs to my desktop PC (without compression).
2) Streaming of these ripped DVDs as well as my music from my desktop for playback on my home theater.
3) Playback of all media quickly and without a drop in quality (5.1 sound for audio, no quality loss from compression for video, etc.)
4) Cost effectiveness (read: free)
5) Not interfering with my day to day computer usage. I run Ubuntu Linux as my primary OS at home, so any programs for my PC would have to run in Linux.
6) Playback of High Definition content. (optional)
Step 1 – DVD Ripping
I played around with a few different methods of DVD ripping before finally settling on DVD Shrink. My goal was to be able to rip DVDs from my Linux desktop, but I ran into a few problems, so I gave up and took the easy way out. Unfortunately, the "easy way out" was to install a virtual machine running Vista, install DVD Shrink, rip the DVD and send it back to a shared drive on my host machine (this process was a blog post in itself).
I set everything up so that the result was a single .vob file for each item on the DVD (eg. main movie, special features). So far so good. High quality DVD rips- check.
Step 2 – Setup the Media Server
Once I got a movie stored on my server machine, it was time to setup a server to enable streaming to my 360. There were a few Windows-based ways to do this (it looks like Tversity was the favorite), but I definitely wanted to do this in Linux since running a windows VM all the time is too resource intensive. I tried out a couple programs to do this. First up was uShare.
uShare is a UPnP server that is light on features, but light on setup. It was fairly painless to setup (it installs right from the Ubuntu repositories), but I immediately ran into some problems. First, the 360 does not support a lot of video formats, and somewhat surprisingly, .vob files with MPEG-2 were not supported. Furthermore, uShare did not read the tags for audio files or specify the type of any file, so my media was a MESS when viewed from my 360. My images would show up under both the "video" and "music" sections, and some movies would only show up under "music". Lastly, since my .vob files were not playable by the 360, I needed something that could transcode them as they were streaming (I don’t want to have to transcode every single DVD that I rip). Clearly uShare was not the right choice.
Step 2.1 – Setup the Media Server with Transcoding on the Fly and Improved Categorizing Features
There were a few Linux compatible UPnP server programs that I researched to accomplish this.
First up was MediaTomb. Although it did not support the 360 due to the 360’s funky Windows Media Center-crippled UPnP support, it was a breeze to setup. Although the UI was pretty clunky it seemed like a decent program for anyone with a compatible UPnP player (like a PS3).
Next was TwonkyMedia. I didn’t evaluate this program because it costs money to use beyond a 30 day trial, and the trial wouldn’t install properly on my machine. This is too bad, since I did read good things about it.
Finally I decided to try Fuppes. Although, I had to compile it from source, Fuppes had the honor of being one of the very few open source projects that actually built and installed without any errors or hiccups whatsoever. Very big kudos, and a nice way to start off. Configuration for Fuppes was straightforward (I followed this guide) except for one minor problem. It turns out that you really do have to specify the port number and network interface in the "network" section of the config file or the 360 won’t find your Fuppes server. Aside from that, things worked pretty well once I got everything configured. Music was sorted by artist and album (once I built with taglib installed), and everything seemed to be organized much better. I could stream my .mp3s without a hitch, and my xvid encoded .avi files played great as well. Unfortunately, I still had some tinkering to do with my mpeg-2 encoded .vob files…
I tried out a few different codecs for transcoding my .vob files on the fly, but I was consistently rewarded with "unsupported format" errors from my 360. Finally, I realized that my 360 would ONLY play xvid encoded .avis with a mime type of video/x-ms-wmv. Fun. Unfortunately, Fuppes only supported on the fly transcoding using ffmpeg which did not seem to support encoding to xvid. Crap. Scratch one night of tinkering until dawn.
As a last ditch effort, I tried hacking on the Fuppes source to get it to use mencoder to do the transcoding to xvid instead of ffmpeg. Surprisingly, my hack actually worked on the first second compile. What didn’t work was the 360 playing the file as it was transcoding. As soon as I stopped mencoder from transcoding the file, it would play the partially converted file, but it simply refused to play the thing when mencoder was still working it’s magic. Scratch one weekend of tinkering.
Conclusion – Temporary Defeat
Although I learned way more than I thought I would need to about video encoding, and the 360’s UPnP support, I did not accomplish my goal. I could just transcode my MPEG-2 ripped .vob files into xvid .avi files, but the encoding process is time intensive, and the 360s interface and UPnP support leave something to be desired for a media center. The 360 just does not seem like a great solution for my media center needs at this time. Next up, it looks like I will probably be taking a look at installing XBMC on an original Xbox. We’ll see how that goes soon!