Libdvdnav is a library that 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.