Overview

This is an application I created to make it easier for me to get shows off the Tivo. I first got the bug in me to create this when there was a marathon on the satellite, and it was just painful to keep up with the Tivo.

Although other tools exist to get shows off the Tivo, it is difficult to get more than one show out of the Tivo at a time. I wrote this as the next step towards writing a Windows Media driver that would get shows off the Tivo.



What is This?

This application is a combination of ConvertStream, netmplex, and a Windows based UI in front of telnet to get shows off the Tivo. If consists of a TCL script that creates the Now Showing list as XML, and an MFC application that talks to the Tivo via telnet to run the script. Once the list of shows are downloaded from the Tivo, it is presented in a Windows list view, where who can select one or more shows, and then from a menu, choose to extract the shows. It is that easy. You can get details about the shows simply by clicking on them, which uses the TivoWeb server to get the details about the show.



How to Set This Up

I'm not going to go into the details of Linux or some of the more common Tivo utilities on the Tivo. I'm assuming you have some basic knowledge of hacking on your Tivo.

This application is dependent on the TivoWeb files, or more precisely, complements them. You need to make sure that you install the ShowList.tcl file into the same directory as the TivoWeb files. Use FTP to transfer ShowList.tcl to the Tivo, and make sure you chmod +x ShowList.tcl to make it executable. If you don't have the TivoWeb files installed, make sure that you also ftp util.itcl (included in the zip) over to the Tivo.

In addition to the ShowList.tcl file, you also need to have ExtractStream and nc on your Tivo. Make sure you use the binary mode of transfer in ftp to put these onto your Tivo. After these files are on the Tivo, you should edit /.profile to make sure the directory for these files in included in $PATH, If you don't modify your /.profile, then you can also use the Options... choice of the File menu of the TivoApp to add cd directory to the startup script.

How to Use This Application

To use the application, choose Connect from the File menu to initiate the connection to the Tivo. Make sure that either the IP address or the host name for the Tivo has been entered into the Options dialog.

After a short delay (10-20 seconds, perhaps more on big Tivos), the Now Showing window shows the list of shows your Tivo has recorded. You can click on any show, and the TivoWeb server is contacted to display the show details using HTML. To select the shows to extract, use the mouse to hover over the shows you would like to extract. After about a second, the show is selected. You can also press the Ctrl key to select multiple shows, or you can press the Shift key to select a range of shows. When you have selected all the shows, you can choose Extract... from the File menu to specify how you want to extract the shows.

When you extract the shows from the Tivo, you have your choice of extracting the raw tyStreams, an MPEG file, or as separate audio and video files. Each option has their own purpose:

In addition, this application has a ConvertStream mode, where it can take one of more raw tyStream files and create an MPEG file. This is essentially a file based version of netmplex. This is done by choosing Convert tyStream Files from the File menu.



What you Should be Aware of

This application has several limitations. First, there is the option to extract to best quality for MPEG. However, turning this option off seems to result in poor quality.

This relies on netcat to send the data from the Tivo to your PC. If you don't already have it on your Tivo, it is included in the zip.

To extract the details of the show, this relies on the TivoWeb server. It may work with the httpd.tcl that was supplied with ExtractStream, but I have not tried that.

This includes a modified version of ExtractStream, based on the 0.3 version from CVS. I found a bug in ExtractStream where it was taking one too many chunks off of the Tivo, resulting in some of the bogus sequence errors.

Finally, I am putting this out now for two reasons: because I opened my mouth and people are getting interested in it, and second, because I am likely about to start on a .NET exploration project that will likely take up what free time I had. It is not quite as polished as I would like, but I don;t know if I'll have the time to really finish this. It does the job I need.

Bugs

A few bugs I have not yet fixed: If you close the MPEG extract status window, then subsequently quit the application, you will get a fault. The MPEG extraction window really should tell the Now Showing window that it is going away.

There seems to be a huge memory leak when you exit the application. For whatever reason, I could not get the OnClose to go to my view for the Now Showing window. I haven't been doing a lot of MFC UI work for the last few years, so it is probably something stupid.

My Wish List

There are still a few things I'd like to do to this application, if I ever get the time to finish it:

If you are interested in helping with some of these features, please drop me an email.

Acknowledgements

Much of the central part of handling the streams from the Tivo was not done by me. For this you can thank Nick Hull and his masked cohorts, who brought us ExtractStream. Related to that is the ConvertStream code, for which Gary Steele. That work of course was pioneered by Andrew Tridgell and then D18C7DB.

I also did not write the MPEG conversion code. I integrated netmplex into the application to perform the conversion, but I'm not sure who to give credit to for this code.

The tcl script was based on code from the TivoWeb project, and for that we can thank Stephen Rothwell (sfr@canb.auug.au), Jon Squire (jsquire@justice.loyola.edu), Josha Foust (tivoweb@lightn.org), Mike Baker (mbm@linux.com) Mike Byrne (Turbo) and John Paglierani (John@Paglierani.net).

If I missed anybody, it is purely unintentional.



The Bits

The application (along with the TCL script and a modified ExtractStream) is in TivoApp.zip

For those more adventurous, here's the source: TivoApp-src.zip