Introduction
Several years ago I decided to discard my Tivo, and replace it with a
Linux-based
digital video recorder (DVR)
built from off-the-shelf computer parts. My
friends at work dubbed this
Project Deanvo.
Digital Video Recorder Overview
A Digital Video Recorder (DVR) is a computer with the ability to
record, and play video. Typically these devices have a controlling
piece of software which schedules recordings, and automatically
changes the channel on your cable TV box, or satellite dish.
Other than the basics, many DVRs have the ability to play DVDs, create
DVDs, capture streaming Internet radio, download podcasts, listen to
MP3s, view photos, and just about anything else possible on a general
purpose computer.
Why Build a DVR?
The short answer is no sane person would build their own DVR. It's
expensive, requires significant time and effort, and the most
commonly used software
(
MythTV)
is far from perfect.
But Tivo has begun to engage in some questionable business
practices:
-
Tivo monitors the programs you watch. Of course, they claim
this information is not used for nefarious purposes.
-
Tivo automatically downloads advertisements. This is particularly
galling since you're paying for it. The whole point of a Tivo
is to avoid ads.
-
Tivo makes it difficult to cancel your subscription. You can
sign up online, but canceling requires a lengthly phone call.
They put you on hold forever, and then you have to listen to their
retention sales pitch.
A Tivo also require an expensive monthly service ($13/month). And
Tivo controls your recordings; there's no easy way to extract them.
In short, a homemade DVR allows you to regain control of your TV.
Quiet and Green Components
The hardware requirements of a DVR are slightly different from a general
purpose computer. DVRs are usually never turned off, so a green (low
power) machine is desirable. Also, a quiet DVR is essential, as any noise
might disturb playback.
But the machine must have enough processing power to play high bit
rate video. And a powerful CPU typically requires a noisy fan.
Fortunately there are a number of green, and quiet options available.
Here's the part I used:
-
- Antec NSK2400 Case
-
The
NSK2400
is specifically designed to be a media center PC. It has two
120mm fans which provides good ventilation with minimal noise.
- AMD64 3800+ CPU
-
The
AMD64 3800+
draws only 45W, and can programmatically have its clock rate lowered
to save even more power. Still, it has enough processing power to
easily play DVD quality video.
- Rosewill RCX-Z2-EX Heatsink
-
The
XP-90 has four heatpipes bonded to aluminum fins. It is designed
to dissipate 125W of heat -- about 3 times what the AMD64 3800
generates. This allows CPU to run with the fan off most of the time.
- Corsair VX450W Power Supply
-
The
VX450
is very quiet, and its efficiency rating is 80 Plus.
- Western Digital WD10EACS 1TB Hard Drive
-
The
WD10EACS
is a high capacity (1TB), low noise, energy efficient hard drive.
Perfect for a DVR.
- Hauppauge PVR-250 Video Capture Card
-
The
PVR-250
is a common component for a home made PVR. It has a hardware MPEG2
encoding engine which produces DVD quality video.
LCD Display
Some DVRs have a front panel display. While not absolutely necessary,
it adds a nice finishing touch. I bought an LCD display from
All Electronics,
and built some control circuitry, and a carrier:
LCD Carrier
|
LCD Circuit Board
|
Cover
|
Here's what it looks like assembled:
LCD Display Assembled
|
LCD Display Installed
|
Satellite Dish Control
A DVR must be able to change channels on a cable, or satellite dish box.
This is accomplish this by mimicking the infrared codes sent by the remote
control. Commercial infrared transmitters typically do not support Linux.
After some research I decided to built my own. The circuit is remarkably
simple:
Infrared Transmitter
|
Circuit Diagram
|
The Max232 provides a serial connection to the computer. The
PIC microcontroller is a one-chip computer.
It is loaded with the following microcode:
-
ir.asm
Software (MythTV)
The de facto standard for a Linux-based
DVR is
MythTV.
It is far from perfect, but it does have many attractive features:
-
Commercial flagging. Tivo lets you fast forward past advertisements,
but MythTV allows you to skip the entire commercial break with the
press of one button.
-
Distributed playback. MythTV is divided into a recording
module (backend), and playback module (frontend). This provides
an built-in
Slingbox-like
feature enabling playback on any Internet-connected computer
(PC, Mac, Linux). And since MythTV supports Universal Plug and Play
(UPnP),
it also plays back on Sony's
Playstation 3
and the Samsung 8-series LCD TVs.
-
Inexpensive monthly service. MythTV needs a database of TV listings.
While it is possible to extract (scrap) this information from
web sites like TVGuide.com, almost all MythTV users buy a subscription from
schedulesdirect.org.
It's cheap ($20.00/year), and very reliable.
-
Open source
development.
The main advantages are that it's free, new feature are added rapidly,
and bugs get fixed quickly.
-
Numerous
Plug-in
Features. MythTV is designed to be extended by a third party.
For example,
MythVideo
can import, transcode, and play DVDs.
MythWeb
provides a web interface, which
allows you to schedule a recording from any computer with a web
browser.
Here's a few screen shots:
MythTV Main Screen
|
MythTV Recorded Programs
|
MythTV Program Guide
|
MythTV Program Playback
|
NPR Recorder
I listen to a lot of
National Public Radio (NPR).
It's the PBS of radio. Since most NPR stations have streaming MP3
broadcasts, it's pretty easy to automatically capture recordings. I
cobbled together some
perl
scripts which are activated by a
cron
task, and voilà: NPR Tivo.
Here's the relevant files:
-
npr_tivo.tar.Z
Conclusion
It was a lot of work, but I love my MythTV box. Of course, a year
after I got everything working, I bought an HD TV. My MythTV box
only supports
480i
(DVD resolution),while the TV supports
1080p (full HD resolution).
I suppose it's time to upgrade. That's the problem with computer
technology: if it's working, it's out of date :)