Editor's Note: We have a special bonus How-To about hacking your TiVo this week courtesy of Ben Spink, who was running out of bandwidth on his hosted account and kindly agreed for us to repost it up for him here. We were of course more than happy to oblige, especially since we just stopped hosting Engadget on Geocities a few days ago.
After reading a post on Slashdot about turning your iPod into a Universal remote control I thought it would be cool if I could control my TiVo from the web. How did I jump to that idea? Well, the iPod hack recorded the IR signals from a remote (such as a Tivo remote) as sound files. You then played them back and the Griffin device converted the audio signal to IR signals. I had already experimented with Quicktime Streaming server and knew how to broadcast a video source on the web. So now with the ability to simulate my remote, I could both watch and control the Tivo.
The first thing I did was download the trial version of Total Remote from Griffin Technology for my iPaq. (It will run for 3 days allowing you to test it out before you buy.)
I then stopped by Radio Shack and bought an IR transmitter module and a IR receiver module (~$3 in parts). These were, in theory, supposed to work according to the iPod hack website I had read.
I didn't waste time soldering wires until I knew if they would work. I just bent the wires around my audio plug so I had continuous contact and used them as they were. I was able to record a signal from the receiver, and I was able to transmit. But I had to amplify the signal I recorded quite a bit, therefore probably destroying the signal. Either way I was never able to get any device to respond to IR signals I was transmitting. Even with my iPaq recording the signal (so I knew I had a good recording), I still couldn't transmit the IR signals using my little IR transmitter I had bought from Radio Shack. So I broke down and ordered the Total Remote transmitter device (Froogle : ~$16).
This device is what was used on the iPod example. It plugs into your audio port and converts a sound signal into an IR signal; its intended use is with the iPaq and the Total Remote software. I used the software to record the signals off my TiVo remote, nearly every button at least 3 times while I was figuring it all out. Basically it came down to holding the remote right in front of the iPaq's IR receiver. Note: press the button once quickly, do not hold it as the instructions eluded to. I then plugged the iPaq into my G4 Mac laptop via the audio-out port on the iPaq to the line-in port on the Mac.
I downloaded Sound Studio from VersionTracker. (Any recording software should work fine though.) I had to turn the gain all the way up on my line in port in order to get a strong enough signal that worked for playback. I recorded each button into its own .aiff file. (like tivo_play.aiff, tivo_pause.aiff, etc.)
As you can see from the picture I got a little bit of clipping, but I wanted the sound waves to be as loud as they
could. Not much was clipped. I made these are available for download,
so there is no need for you to go through the struggle I had to. I also cleaned up duplicate signals I occasionally got
from holding the button too long when recording.
Now I had the sound files. I made a web page with a TiVo remote I found from a quick google images search. I created a client side image map of the remote assigning each button to a different ftp:// URL. A couple buttons I didn't enable just because I didn't want them enabled. Why would I want someone to remotely turn my TV on and off? Well, unless I wanted to play a prank on my wife I guess. You can try out the remote below. The buttons are active, but all they will do is open a new window for you.
Now I must mention that I am the author of CrushFTP.
CrushFTP is a full scale professional cross platform FTP server. It includes features such as a true virtual file system, load balancing, zipping of files / directories on the fly, user / groups, ratios, bandwidth restrictions, email events, full GUI remote administration, installs as a service, and has a plugin interface so you can extend it to do what you need. Pricing starts at $25.
Since I am such a big fan of FTP I decided this would be a perfect opportunity to use some of the abilities of my FTP server. I used FTP since it didn't require any new protocols, and very little work on my end. I could have done everything without coding, but using a plugin was a more efficient method. I wrote a plugin with my public plugin interface for my server; it is very basic in its design. If the user account of "tivo" logs in and requests a file, the plugin intercepts the request. For instance, if you request a file named "tivo_play.html", the plugin first plays an audio file ("tivo_play.aiff"), and then it redirects your request to a file called empty.html that is 0 bytes long. This allows the web page to have links requesting different files from my ftp server that all point to the same empty file. However just from the request, a sound file is played which is transmitted via IR to my TiVo, thus controlling it. The plugin source is available here : TivoController.java. To use, just put the compiled version into the folder named "plugins" inside the CrushFTP folder. See screenshot. All three items must be there.
Next came the video. This was the easy part. Using Apple's "Quicktime Streaming Server" (also known as Darwin streaming Server, which is free), Apple's Quicktime Broadcaster (also free), and a Pyro AV Link (RCA/SVideo to digital firewire input device Froogle: ~$146) I was ready to broadcast audio and video currently from my TiVo to the web.
I downloaded and installed the excellent 3ivx component, which allows you to encode and decode Divx formats for free. (I've been informed that the license for the 3ivx component only seems to be free if you are playing back content. That seems to be a bit restrictive, so just keep that in mind.) I then began broadcasting my TiVo's video/audio-out signal in streaming Quicktime.
Then I setup the network server to which the live feed was directed. I had to manually specify port 8000, otherwise it failed due to some sort of bug in Quicktime Brodcaster or Quicktime Streaming Server.
I loaded the movie file I was brodcasting, "tivo", in Quicktime player using an http:// URL instead of the one it suggested (rtsp://). When I used rtsp:// URL, the video was slow, choppy, and just really unusable. I changed the URL to be http:// and it worked fine. My URL was http://127.0.0.1:8000/tivo.
I saved the the live playing movie in QuickTime player as "tivo.mov". (It was essentially just a reference to the
streaming movie.) But Bandwidth was an issue (I only have 384Kbps outgoing on my cable modem) that only allowed
for 10 FPS at 320x240; it was a clear enough image to read the news ticker on CNN. You can see in the screenpic I was
only using 247kbits out of 284kbits of available bandwidth. Using it inside my home wireless 802.11g WLAN I could do
some really nice full screen hi-res video by turning up the bandwidth. I could in theory now just carry around my
laptop and watch TV. I also experimented with 3 FPS, smaller video size, in order to keep the bandwidth under
128Kbps so I could watch live TV in my car via a SprintPCS PC card (it worked very nicely). Now if only I could use the
new H.264 codec Apple is integrating into new versions of iChat AV, it would have excellent video quality. (It is only
a preview version in the Developer version of Tiger and can't be used by Quicktime brodcaster as yet.)
I embedded the project into my web page with the remote control. Now I could watch my TiVo, and control it via my buttons to different ftp:// links on my server to play the audio files out on the IR transmitter to my TiVo.
Now I know that looks a little close...but I had to. I didn't have a good way of mounting the iPaq discretely in my
living room, and with 50 feet of non-shielded audio cable running to it, the signal was getting pretty weak. So I had
to keep it very close. If you have the sound coming out of an amplified device, you will have excellent range. The
Griffin IR device is also a little directional, but the more sound volume you have, the less directional it is.
Wow...it actually worked. The only draw back is that because of the buffering for the video, it takes 10 to 15 seconds from when you hit the remote control button until you see the result on your video stream.
What does the end result look like? Well, something like this.
Thanks for reading, I hope you enjoyed it! I'm sure it will give you some new ideas to play around with.
—Ben Spink (firstname.lastname@example.org)