DTGDesign
From NLTiVo
Contents |
Introduction
The Dutch TiVo story started late 2004 after I had read numerous stories about TiVo on websites like Slashdot. As I wanted to use this system too, I started searching the Internet and stumbled on communities in Canada and Australia who managed to get a TiVo working in their countries. Looking at the software-systems they were using at that time, I decided that I didn't like the way they were implemented. That meant that it was time for me to write my own system. But in what language? I guessed Perl was a good option, and it helped that I have always wanted to learn this language. A few months later, after I've read a few books on Perl and browsed websites and documents on the relatively complex internals of TiVo, I started coding in the evenings after work. Over 3500 lines of code and not much sleep later, the steep learning curve was taken. Currently the Dutch TiVo community has it's own working guiding-system. This page is filled with information and documentation on the DutchTiVoGuide-system, the systems that builds the slice-files that can be read by your TiVo.
I couldn't have created this system alone though. Many thanks go out to Warren Toomey, who built the ozTiVo-system. He was there when I had questions about the technical details of the TiVo-internals.
Legal stuff
This webpage describes the way slice-information is created, to make a TiVo work in the Netherlands. This initiative is not intended to create an alternative for the US and UK TiVo-content system, because that's illegal. It was created because there is no 'official' way to make a TiVo work inside The Netherlands.
Limitations for the usage of the DutchTiVoGuide-system can be found in the Copyright-notice.
What data do we need?
Since TiVo Inc. won't provide us with necessary data to make the device useful, we have to create our own. We need the following data:
- Lineup-data
- Guide-data
Line-up data tells what channels can be received in a certain area and through which medium (satellite (or any other external receiver) or cable). It also tells your TiVo at which channel your stations will be positioned (i.e. '1' = NED1). This line-up data is presented to your TiVo via so-called headend-slices. (Frequencies of channels are not stored in the headend-slices, they are stored on your TiVo through the 'palmod'-kernelmodule. Despite this the frequencies are stored in the database to make automatic generation of the config-file for palmod possible.)
Guide-data tells your TiVo what's on TV. Together with information like genres, ratings, actors, episode-information and of course date and time information, your TiVo will be able to record programs for you and generate a profile of the things you like to watch. Without this guide-data your TiVo is next to useless.
When you have this data available you need to present it to your TiVo by using a TiVo-emulator or by manually uploading these files to your new gadget.
System overview
DutchTiVoGuide (DTG) is the combination of a set of scripts and a central database. The goal of DutchTiVoGuide is:
In order to make these slices, information is needed. Information on providers and their line-ups is stored in the database. But that's not all, we also need guide-data. Luckily there is XMLTV. XMLTV presents tv-guide data in XML-format. Dutch tv-data is also present in this format.
Since I'm not going to enter all provider-data at once for all the providers in the Netherlands, I want to be able to dynamically add or remove providers, stations and/or channels without changing the code. When I insert or remove a provider, station or channel, I want the program to create the according headend- and guide-slices dynamically.
The following figure shows a blockdiagram of the DTG-concept:
Each script has it's own purpose:
- The feeder checks for new programs against the database and fills the database with new found programs. It also feeds the database with guide-data.
- The data-enricher enriches the guide-data in the database by adding stuff like genres, ratings, actors, directors etc. from various web-sources like yahoo and the imdb (internet movie database).
- The slice-generator generates slice-files from various tables in the database. The slice-generator dynamically generates head-end and guidedata-slices for every provider in the database. Support for logo-slices and message-slices can be expected in future versions of the slice generator.
- The integrity-checker checks the database for inconsistencies in the different tables (programs without genres, problems with referential tables) and for other known errors and reports them.
- The maintainer presents a web-interface which makes it possible to maintain (add/remove/edit) all the important data in the database. This reflects station, program, genre, trimtitle, provider and line-up data.
Information on the status of any of these scripts, can be found on the planning-page.
Documentation
The following documentation on the system is currently available:
- DutchTiVoGuide datamodel design (v1.60, pdf), which describes the design and datamodel of the DTG-system.
- DutchTiVoGuide database design (v1.60, picture). This picture shows all the database-tables and how these are connected to other tables (ERD). This picture is also included in the design document.
Do you want to help enhancing the DTG-system or do you have questions, comments and/or suggestions: please contact us via the nlTiVo-Mailinglist.
-- Dennisvo


