libdvdnav is a library for developers of multimedia applications. It
allows easy use of sophisticated DVD navigation features such as DVD
menus, multiangle playback and even interactive DVD games. All this
functionality is provided through a simple API which provides the DVD
playback as a single logical stream of blocks, intermitted by special
dvdnav events to report certain conditions. The main usage of
libdvdnav is a loop regularly calling a function to get the next
block, surrounded by additional calls to tell the library of user
interaction. The whole DVD virtual machine and internal playback
states are completely encapsulated.