Sun have been working in digital TV standardisation for several years. Several open standards such as MHEG-6 and the DAVIC standard had used Java in digital TV middleware, but none of these standards had used Java as the primary application model - Java was always treated as a way of adding more advanced scripting functionality to declarative technologies.
This had led to a complicated and clumsy application model, and so Sun felt that it was time to build a pure Java solution. The result of this was the JavaTV specification. Since DVB was working towards the same end, there was a lot of cross-talk between Sun and DVB, and many companies were involved in both specifications. MHP uses the application model from JavaTV as a central piece of the MHP specification, and all of the JavaTV APIs are included in MHP.
Given this overlap, why have a separate JavaTV specification at all? Well, MHP is specific to the DVB family of standards. JavaTV, on the other hand, is not. JavaTV describes a set of digital TV concepts such as accessing service information, selecting a new service, and loading files from a carousel rather than a normal filesystem, but it does so in a way that's not tied to any digital TV standard. It's possible to implement JavaTV on an ATSC system, on a DVB system or on an ARIB system - in fact, this is now happening with the spread of open standards such as MHP, OCAP, ACAP and ARIB B23.
While JavaTV describes many of the core concepts that are needed, it is not a complete specification of a digital TV platform. There are elements missing that must be defined before JavaTV can be used in the real world (e.g. JavaTV says nothing about what underlying Java platform is in use), and so JavaTV is used more as a component of other standards than as a middleware platform in its own right. For this reason, it may appear that learning JavaTV development is less useful than learning OCAP or MHP development.
Since it forms a common core for other standards, though, learning to develop JavaTV applications can be very valuable when it comes to improving portability: using the JavaTV APIs can help reduce the number of places where your application must be modified, and can help you to avoid making any platform-specific assumptions about your code.
This tutorial is designed for people who already have a knowledge of Java and of the basics of digital TV. If you're not sure that your digital TV knowledge is suitable for this tutorial, please take a few moments to review the introduction to digital TV elsewhere on this site.