The State of Home-Brew PVRs on Linuxby Joe Stump
We've heard rumblings in the community for quite some time about individuals creating homebrew PVRs using Linux. Out of these stories and legends, a few projects have actually developed some rather useful PVR applications. In this article, I'll describe my own experience building my PVR. I'll also outline the various projects that make up the current state of PVR technology on Linux.
You'll need to consider a few things when building a PVR. The first is the type of case. Since the PVR box will most likely reside in your living room next to your TV, you will want a quiet, good-looking case. Several cases on the market today cater to the home entertainment PC.
Since your PVR will be encoding video, you'll need a decently beefy processor. Freevo's documentation recommends at least a 400MHz processor, while MythTV says you'll need over 1GHz to record and watch TV at the same time. With the current low prices of processors, I recommend going as fast as you can afford. I also recommend buying as much RAM as possible.
If you wish to record a show and watch a live TV show at the same time, you will need two TV cards: one for recording and one for watching TV. I would highly
recommend using one of the many cards supported by the
bttv Linux drivers. If you wish to listen to FM radio, you can pick up one of the WinTV cards that include an FM tuner as
Audiophiles, listen up! You'll want to put a nice sound card in the box and purchase some nice (-looking and -sounding) speakers.
Before installing MythTV, you'll probably need to install ALSA, fortunately found in the latest 2.6 test kernels. On the other hand, if you are installing Freevo, you will need quite a few applications to get it up and running.
Freevo is basically a controller application that launches various
applications, depending on the user's request. To play movies, record TV, watch
recorded shows, and play DVDs, you will need MPlayer. Alternatively, Freevo's CVS version also has a plug-in for using Xine to play DVDs. I highly recommend
tvtime for watching live TV. MPlayer is currently the default TV application; however, I found that the A/V was out of sync. Using
tvtime fixed this problem.
Remember, for both Freevo and MythTV you will most likely have to recompile
your kernel. Make sure to include frame-buffer support, USB support (for a
StreamZap USB remote and other USB devices, such as gamepads), and
(for quick reboots after hard power downs).
MythTV vs. Freevo
When I started my project six months ago, I decided to go with Freevo, mainly because it played DVDs. Freevo is also programmed in Python, which makes it much easier to hack on for those of us who are C-challenged. It's designed very modularly, making it easy to use other applications.
One of the problems I have with Freevo is that a lot of the features are only 90% complete. There are some small and annoying UI problems, though overall, the application is easy to use and works well for basic PVR applications. Freevo is currently transitioning to a recording daemon, which should improve its recording abilities drastically. For now, I highly recommend using WebVCR+ until Freevo's recording daemon becomes stable. Also, those wishing for time shifting (pausing live TV) may want to consider MythTV, since Freevo does not currently support this feature.
If you decide to install Freevo, you may want to look over my Freevo HOWTO.
MythTV sports a few features that Freevo lacks, but can be quite a bit harder to set up. In fact the setup process is one of the few reasons I didn't choose MythTV. However, the impressive list of features in MythTV will be enough for many people to trudge through the lengthy setup process.
MythTV's more impressive features include time shifting, a client/server environment, rudimentary video editing, and DVD ripping. One of the drawbacks, however, is that MythTV uses its own modified version of NuppelVideo as its primary codec, which will limit those wishing to export recorded shows to other formats (i.e., VCDs). MythTV also comes with its own web back end, support for LIRC, and a themeable onscreen display.
WebVCR+ is an easy-to-use recording interface. It's web-based, written in PHP, MySQL, and Perl. I use WebVCR+ to record TV shows, which are then moved into my Freevo folders where I am free to watch them on my TV. I only mention WebVCR+ because it records TV. If you want more than mere recording, you will want to install Freevo or MythTV.
Outputting to Your TV
After a lot of fussing around, I was able to get Freevo to output to my TV. Whether you decide to install Freevo or MythTV, you will want to purchase a Matrox G400/450 card, which has the best TV-out support under Linux.
Freevo supports both the Linux frame buffer and running in XFree86, while MythTV only runs under X. While getting Freevo to display full-screen on my TV with the frame buffer was rather simple, getting X to display in full-screen was difficult. In fact, I gave up and went with the frame buffer, since it was already working.
Just like any computer, your PVR box can be cheap or expensive. I've put about $600.00 (USD) into my box so far; however, this includes a nice Seagate drive, sound-dampening materials, and a lighted window case. I also justify the extra cost by telling myself it does other things than a regular TiVo and that a TiVo with a lifetime subscription can cost almost as much.
The good news is that the PVR applications out there are ready for home media-center use. The bad news is that it's not a simple task to get a box up and running. More good news is that both Freevo and MythTV have support for much more than mere PVR applications. Both projects support MAME, photo albums, CD ripping/playback, MP3/Ogg playback, IMDB support, and Internet radio and weather reports.
I'd say, on a whole, Linux PVR technology is in great shape. I actively use my Freevo box daily to record TV shows, watch DVDs, and listen to music.
Joe Stump is the Lead Architect for Digg where he spends his time partitioning data, creating internal services, and ensuring the code frameworks are in working order.
Return to the Linux DevCenter.