FreeVo — My home-brew Tivo, minus the monthly subscription fees

This is the latest geek project — reclaiming Robert’s old PC and transmogrifying it into a personal video recorder (PVR for short) with a Hauppauge PVR 350 and SageTV software.

Sure, I could have gone out and bought a Tivo or ReplayTV for about the same (or maybe a little less) money. But I see several advantages to doing it myself;

  • I get a glorious few weeks of primo geek tinkering/learning (in addition to the PVR stuff I found myself introduced to the “silent PC” geek sub-cult as I realized that the PC was making way too much noise to remain in the living room without modification)
  • I get a PVR that I can reconfigure (add disk, add more video cards, etc.) when I want to
  • I don’t have to pay a monthly fee to TiVo (I’m using SageTV software that sucks down the program guides off the web for free)
  • I can share/view the shows all over the home network
  • I can participate in EFF’s call to arms over the “broadcast flag” and be my own hardware vendor at the same time.

    This blog entry is my “notes to myself” to record the saga, and will serve as a reminder if I have to come back and retrace my steps at some point in the future. If you decide to do this, it might be a useful set of tips for you too. For the details… read on

    Stage One — The Deciding

    I wound up building my PVR on Windows XP Home Edition, using a Hauppauge Win-TV PVR-350 video capture card and SageTV software.

    My first decision was to use the Windows environment — I’m just a wimp when it comes to Unix/Linux. Just ask Ralph. He’ll tell you what a hopeless case I am. It’s not that I have a religious aversion to Unix/Linux, it’s just that my brain is wired wrong. So Windows it has to be…

    I decided on the Hauppauge card because my goal was to have a box that would “act just like a TiVo.” I wanted to have the box running headless and control everything through the TV. In order to do that I needed a video capture card that could drive the TV in addition to displaying stuff on the monitor. The Hauppauge card did that, and it did all the “heavy work” of encoding and decoding the video on the card rather than handing that job off to the computer (this is called “hardware encoding/decoding” vs “software encoding” which is what happens when your main computer does the work). The nice thing is that the teenie tiny CPU in Robert’s old computer can handle this without any strain at all.

    Update; DVDs don’t play on the TV. I was hoping to be able to make this the “one box to rule them all” but it turns out that the PVR350 only decodes MPEG files to the TV out. So when you play DVDs, they only show up on the PC monitor, not the TV. There’s a hack that I want to try in which you take the S-Video output of the video card and route it through the S-Video input of the PVR350 — but at best that will be a kludge.

    Further update; Steve tipped me off to using the S-video output on the display adapter rather than the PVR350’s TV-out. He built a similar gizmo, but using a PVR 150 (newer version of the PVR250, no TV out) and likes the results. I tried it this afternoon. The good news is that DVDs work fine. The bad news is that the video quality isn’t near what it is using the TV-out on the PVR 350. So I’ve still got to try the hack mentioned in this thread where you reroute the S-video-out from the computer video card to the S-video-in on the PVR 350. But for now I’ve reverted to using the TV out on the PVR — mucho better picture, no jitter, better color, better resolution, better focus, etc. I think the problem is that Robert’s old machine is really slow (1.2 gig Athelon CPU) which, combined with my low-end nVidia display adapter just isn’t up to the job. Heck, I’ve already got a DVD player…

    Even Further Update – the S-Video cable idea works – kinda. Creating another video source on Channel 1 of the PVR350 for the S-Video output of the monitor card went without a hitch. As soon as I had the cabling done I could tune to Channel 1 and see the computer’s screen. But I needed another cable (to take the sound card audio output and route it to the PVR 350 input) to get the audio working properly. I tried taking the audio from the sound card straight to the TV and wound up with about a 2 second difference between audio and video, due to the PVR350’s buffering/recording. Taking the sound from computer sound-card to PVR350 audio-in fixed that.

    The video quality isn’t bad (jitter is much reduced), although my first impression is that it isn’t as crispy as the PVR350 recordings. And I don’t think you people with 50-inch plasma displays are going to like what you see. But it was fine for me once I get the sound and video in sync. One interesting sidelight — I am able to make MPEG recordings of the DVDs by doing a live recording while playing the DVD. Lotta hassle, but do-able.

    One other note — I was planning to buy an IR keyboard for those times when I was looking at the computer screen — but that’s out. Again, it’s the PVR350 2-second buffer. Move mouse, wait 2 seconds to see where you moved it. That’s not going to work — so all the “mouse work” and keyboarding happens from the laptop, through PC-Anywhere thank you very much.

    Back to the story…

    With the PVR card chosen I was only half way there. The software that comes with the Hauppauge card is pretty basic. It works, but it can only be accessed from the computer screen — not the TV screen. Since my goal was to avoid having a computer screen at all, I got a copy of SageTV which *can* be controlled from the TV screen.

    Stage Two – making the PVR card work

    I made a mistake on the version of Windows — I decided to try Windows Media Center Edition at first and ran into Driver Hell when I mistakenly bought the wrong (non-MCE) version of the Hauppauge PVR card. A few days of tinkering and I decided to drop down to regular XP/home OS.

    Life got easier at that point but I could have saved myself a day or two if I had followed all the advice on the support forums — which, in a nutshell was don’t use the software on the CD – go out there and update *all* the drivers and software with the latest versions. Including the video card that drives the monitor. Things went much better once I went through and applied all the software updates from Hauppauge — which can be found here.

    Update; PVR350 card is slot-sensitive. I discovered this when I moved a working configuration to the neato new quiet case (see below about that). Suddenly, as soon as the software touched the PVR350 it locked up the whole computer, not just the software. It took a while to figure out that I’d moved the card to a different slot, and that particular combination of slot and BIOS settings was a Bad Thing. So if the PVR350 freezes your whole machine, try swapping slots.

    Stage Three– lighting up the SageTV software

    The only tricky bit with the SageTV software was getting the Hauppauge remote to work with it. This was a crucial item, because without the remote I would be forced to use the computer to run the PVR which was like totally why I got the Sage software in the first place.

    The solution lies in the configuration file that the Hauppauge IR software uses to initialize the buttons on the remote. It turns out there’s a whole bunch of interesting stuff you can do with the remote, and the best way to teach it to do these things is through that file. The SageTV support forums are a great place to learn about all this. Here’s a link to the post which got me started cracking the code.

    But things didn’t get really cooking until I came across the post that had a config file that would let the remote grab the SageTV software even if the software didn’t have focus on the PC. Here’s a link to the post that has the right config file. The INI file that finally did the trick for me is called

    This file handles the “no focus” problem and also handles the newer 45-button remote that comes with the Hauppauge card.

    Update; toggling SageTV on/off with the green “power” button on the remote works fine. But it takes two button-pushes each time. To quote the old joke “That’s not a bug, that’s a feature…” The tricky thing is that you can find yourself looking at a screen with menus that don’t respond to the remote. A second button-push fixes that.

    Stage Four– making things quiet

    Now that the new gizmo was finally off the workbench and into the living room, it quickly became apparent that my usual el-cheezo standards for noise were not going to cut it. Marcie started giving me subtle hints that having this rackety-blower box in a place where Normal People hang out was likely to be a Subject of Ongoing Discussion. So I started looking into ways to make it quieter.

    Wow! There are all kinds of folks that have been thinking *hard* about this for a while. Interestingly, a lot of them trace their roots to the gamer community. Those are folks who are really into performance, heat and noise. The place that really got me clued in was SilentPCReview.

    The first big improvement was to replace the video card, which was a pretty good one in it’s day but had a fan on it that made one heck of a racket. I installed an el-cheapo card that had no fan, but supported DirectDraw (a requirement for the Hauppauge card to work). Since I wasn’t planning to hook a monitor up to this computer, cheaper slower cooler seemed like the way to go at the time. But by now, you’ve read about the “no DVDs through the 350” problem — so there’s a trade-off to consider. For now, I’m happy with my choice, as I’m thinking that the TV out on the 350 has been optimized better — it’s got great picture quality. But it’ll be something to ponder if I ever build another, or upgrade this one.

    The next step was to take the fan off the motherboard chip set heat sink. Because I’m running the box at idle, the heat sink can handle the job on its own and I could get rid of another little tiny/noisy fan.

    Just those two steps made the box quiet enough that it now passes the Marcie test — but reading all the stuff on the ‘net got me really into this so I ordered a quiet case kit that includes a nice quiet power supply, a couple of quiet case fans and a gizmo that ports fresh air onto the CPU. Here’s the link.

    Update; Trouble was, about the time my box was due to ship, a C|Net article ran about those guys and the wheels came off their operation. I waited a couple weeks and then bailed out and, for about a third the money ($80) bought another of SilentPCReview’s favorite cases – Antec 3700BQE. That link points to the review on their site. Those cases are everywhere — even Best Buy had ’em although they were a little spendy ($100 instead of $80). It’s up and running now and fantastic, much quieter than the noise level in the room when the furnace is running. I got a big thumbs up from Marcie.

    And to top things off, at least for now, I added a CPU cooler.

    I made a mistake on the disk drive that I bought for this project — at the time that I bought it I wasn’t worrying about noise and so I just bought a Seagate Barracuda 200 gig drive (the video recorder consumes about 2 gigs an hour, so that’s good for about 80-90 hours of recording). It’s not bad, but when I later got fixated on “silent running” issues I found that some disk drive manufacturers are now starting to pay attention to noise and the next time I go buy a drive for this machine I’ll do a little research on which ones are quietest — here’s a link to get started. Update; It turns out that the new case is great at isolating the disk drive noise, so I’m not feeling so bad about that.

    Stage Five — viewing stuff from everywhere

    One of the advantages of this gizmo is that it’s just writing files out to the disk drive, and those files are visible from any machine on the home network. So I’m working on making those files play on those machines. Since the Hauppauge card will encode the files in a bunch of different formats, I’ve been tinkering with that to see which ones work best on the PCs around the house. The default encoding scheme is MPEG-2, which requires a codec that in turn requires a license — so my laptop can play the files because some application or other has an MPEG decoder, but the rest of the PCs in the house don’t.

    Stage Six — adding another PVR card (getting the remote to work was the only hard part)

    Well, we lasted about 2 weeks before Richard and I ran into a recording conflict (I wanted Mythbusters, he wanted South Park — figures, eh?). So I bought a PVR150 and stuck it in the box. The only tricky thing was that dang remote…

    The problem is that Hauppauge cards aren’t designed for “multiple cards in the same box” configurations, so the IR Remote software gets confused. The immediate work-around (every time you reboot your box) is to;

    – Disable the card(s) you don’t want to use for the IR remote (in Control Panal/System/Hardware/Device Manager – right-click on the offending card and select “disable”)

    – Reboot the machine

    – Start up SageTV (if it isn’t running already)

    – Re-enable the card(s) you’ve disabled

    The problem with this is that my nice headless box now needs to be “touched” every time it reboots in order to restore the remote-control capability. Not a terrible hassle, but not smooth. Nat’n just turned me on to a gizmo that you can use to twiddle those devices on and off through software — it’s a Microsoft shim called DevCon

    I decided to write the little scripts in tools that you can get for free if you want to tag along. The shell is a .BAT file that runs every time the machine boots (I just stuck it in my personal Startup folder). The scripts are written in REBOL — which is a completely nifty, fast, powerful, small-footprint, free scripting language that you can download from here.

    I’m still tweaking my scripts so I’ll come back and post the actual files when I get them running. But here’s the concept.

    The BAT File;

    – Waits 60 seconds before doing anything (so if I need to jump on the box, I can do that and disable the rest of the script)

    – Looks for FILE1 (really a flag) to see if the “extra” cards have been disabled. If they have, start the SageTV software, re-enable the extra cards, remove FILE1, write FILE2, write a completion message to the activity file, and exit — the system is hunky dory.

    – Looks for FILE2 (another flag) which means the system has rebooted (or crashed and rebooted). In this case, run a script to disable the “extra” cards, remove FILE2, write FILE1, write a completion message to the activity file and reboot the system.

    – If neither file is found, something is hosed up. Write an error message to the activity log and exit.

    Lessons learned

    Here’s the cookbook summary;

    – I would use a dedicated box — this rig is touchy enough that I wouldn’t want anything to cohabitate with it.

    – Start with a fresh install of the operating system. DON’T install the PVR350, just do a plain-vanilla install.

    – Once XP is running (and updated), head over to get the newest versions of the software for the PVR350 here.

    – Unzip the drivers (per the instructions on the site), power down, install the PVR350, come back up, use the INF files you’ve just downloaded for the drivers, apply the driver update.

    – You also need the IRREMOTE program from the Hauppauge site — SageTV will use it. Go ahead and install that now.

    – If you want, you can load the WinTV2000 application. But only for a minute, and only to test that the PVR350 is working. Hook everything up (cable, TV, IR) and fire it up. If it runs without errors, you’re in good shape. Forget about configuring it, it’s crummy software. Just uninstall it.

    – Follow the link at the Hauppauge site for the SageTV software – you can download a free-working-trial version that’ll work for a couple weeks. Install it. When it asks, tell it to go ahead and configure itself to take advantage of the Hauppauge remote-control. Again, if it runs without errors, you’re rockin’. This time, go through all the configuration screens to pick out your cable system, program guide and like that.

    – Optional – configure the PVR350 to play DVDs through the TV-out. If you have S-Video output on your computer’s video card (the one hooked up to the monitor, not the PVR350), connect the S-Video out from that card to the S-Video input on the PVR350. Connect the (line) audio output of your computer to the line-level audio input on the PVR350. Go into the Sage software and add another “source” for the S-Video connection you’ve just made (Setup/Setup Wizard/Add New Source). Set it up as a “Capture S-Video” source, assign it to an unused channel (most likely Channel 1). To watch whatever is on your computer screen (and DVDs) on your PVR350-connected TV, go to the Live TV Guide and select that channel. Convince your computer to play a DVD and it will show up on the TV. Set up a Live Recording to coincide with your DVD-viewing and Sage will write a copy of whatever you watch to your disk drive. Video quality is good enough for me and my 30 inch TV — may not be so hot if you’ve got a monstro set.

    – Get the remote working. Go get yourself a copy of
    , read the README, and replace the file in your WINDOWS directory with this one. Bounce the IR (a program that you’ve already installed) and your remote should be working.

    – Make the box run headless. Hopefully your BIOS will have a setting where you can tell it to boot even though it’s got keyboard-missing errors. Otherwise, find a place to hide your useless keyboard. Configure SageTV to auto-start when the box comes up. If you’re going to put remote-access software on the box (I threw a copy of PCAnywhere on there), do it now. Remote Assistance could be another route — but I don’t know how well that will work with XP Home, which doesn’t have all the goodies that XP Pro does.

    – Make the box boot without a login. I don’t want to touch this box — so I wanted to avoid the login prompt. Here’s a great writeup that describes how you do that. Take note of the “cautions.”

    – Add the second PRV card. I’m not sure whether the drivers are the same for all the Hauppauge cards, so I forced the PVR150 to use “it’s” driver rather than the one that was already there by downloading the 150 driver from Hauppauge, putting it in a different location and using the manual options when the hardware-installation wizard launched. See above for the workaround to get the remote working, and stay tuned — I’ll update this entry if I get a shim written that automates that.

    I think that retraces my path. I’ll look at this again in a few days and see if anything comes to mind.

    Block Diagram

    I’ve got a little tangle of wires at the back of the computer now, so I drew up a block diagram…

    Yet to do…

  • Write the little shim to fix the IR remote conflict that’s caused by adding the second card.
  • Integrate an HDTV card into this gizmo — so far this rig only handles analog cable TV. SageTV is working on supporting HDTV cards, but they’re not quite there yet. So I haven’t quite gotten to the place that EFF is describing…
  • Figure out “play stuff all over the house” (see above)
  • Figure out how the rest of the media capabilities of SageTV work (photos, music, etc.)


    Here’s a snapshot of my living-room-floor workbench while i was transferring stuff from the old noisy (beige) case to the cool, quiet, new (black) case. Can you see why Marcie takes a proprietary interest in reclaiming the living room for human habitation? No sense of humor, that girl…