After posting my Hello, World sample, I realised I hadn't really explained what iHD was. You might have seen the demo of the kinds of things iHD can do, but that's not very geek-friendly, now is it?
In a nutshell, iHD ("interactivity for High Definition") provides the user interface between you and the HD DVD content. It is used to show the menu system, implement special features, play games, download network content, and so on. This interface is shown on top of the video so that you can do things like have pop-up menus that appear while the movie is still running (the HD DVD display is broken up into several "layers", including two video layers and the iHD layer).
Unlike DVD, where you typically have two "modes" of operation -- navigating through static full-screen menus to select chapters, audio setup, special features, etc.; and watching the video -- in HD DVD you really only have one "mode" where full HD-quality video is playing in the background, whilst a rich, fluid UI is running in the foreground. Obviously the background video doesn't have to be the main movie -- it could be some generic animated background, or a movie trailer, or just a black screen -- and the UI doesn't have to be visible all the time; in fact you would typically hide it while watching the movie!
As I alluded to in my "Hello, World" post, iHD is somewhat like HTML in that it utilises declarative markup to describe the layout and styling of the on-screen elements, and ECMAScript for additional behaviour and interacting with the player's API (for things like "Pause the video", "Start playing deleted scene #5", or "Download new trailers from www.warnerbros.com"). This "page" is then composited on top of the video to give you the final output.
What makes iHD different than a normal web page (other than the HD movie underneath it :-) ) is the way in which it integrates SMIL to provide timing and animation support for the UI. Using additional XML tags inside the markup file, content authors can "cue" certain actions to occur based on various events in the system. For example:
·When the user hits the "menu" key on the remote, slide a menu-bar in from off-screen
·When a button gets the focus, make it 20% bigger and increase the opacity to 100%
·When the user mouses over a certain section of the screen, show a tooltip describing what they see
·When the movie hits 1 hour 25 minutes, show a red box around a section of the screen to highlight a goof
These things can all be done without any script programming; they are all done in a simple "when this happens, take these actions" declarative fashion. (Well, "simple" is relative; you can get some pretty complex cues going on, but you can do a lot of things without ever writing any script code). iHD uses a subset of XPath to query the state of the markup page in order to trigger these events. In turn, these events can be propagated to the script engine, which can then perform more complicated actions or interact with other parts of the system (the player, the network, etc.)
I'll be updating the Hello, World sample over the coming weeks to show more and more functionality, including XPath-based animates and some script. Unfortunately you won't be able to "follow along" at home, but one day this might be useful for people :-)