[matroska-devel] Menuing System

Pamel Paul at msn.com
Wed Jan 15 05:04:28 CET 2003

I had some ideas for a menuing system.

The first is why not exactly duplicate a DVD menu system and then alter it
to fit into a stream.  I admittedly know next to nothing about DVD menu's,
other than they are spread out over several files.  I also don't know if the
design of their menu system is protected by copyrights that require fees to

The other consists of 2 seperate parts.

First, the background.  You could use a single frame, or mutliple frames to
have a movie going in the background.  This is simply a video track with an
(optional) accompanying audio track.  All of the menu backgrounds could be
contained in one long stream with no seperation, just like in a VOB.

Second is the control track.  The could be done using a Variation of USF.
Actually, all that would be required is adding a few elements to the USF for
a very simple scripting.  Ala, menu allows moving selection up/down, and
what the up/down text elements are, and text color changes when selected.
Alot of other more comlicated things could be done such as changing text
position, size, font, etc the exact same way.  This would be contained in
what would basically amount to a subtitle track, ebml'd and timestamped the
same way as USF is.  Also, acting as a control track that would contain
simple commands about a menu track that just contained information such as:
    Tracks 4 and 5 are part of the menu. (4=Video, 5=Audio)
    Menu screen 1 is from 0:00-2:00, repeating starting at 0:30 once 2:00 is

Because the background would be rendered using the same filters as the video
playback, there would be no extra software required.  And because the menu
selections would be using a USF variant, the same code could be used for
displaying the menu items.  The only thing extra would be the scripting, but
that should be relatively simple.

An example of a menu would look like this:

The Menu/Contol track is track 8.  Either private codec data or the first
elements define the background as tracks 6 for video and 7 for audio.

0:00  Menu starts playing a video clip.
0:07  Text items start to fly out, or appear on the screen
         using standard USF code.
0:13  The text items are in place, but hit the end of their duration,
         and are replaced by identical menu items at the exact same
         time so you don't notice.
0:13+ User can use arrow keys to select options.
         (Mouse support can be completed last)
         Selecting one option sends control information to the player/filter
         to skip forward to 2:00, which is a different menu.
1:59  Time stamped control information tells the player/filter to skip
         back to 0:13, which sets the audio/video/menu to 0:13 where
         all of the menu items are drawn again in the same place.
2:00  Background may change at this point depending on complexity
         of menu, or the person that set it up could have used one
         continuous video sequence.
2:02  New text items start to fly out, alot like at 0:07.
2:04  Text items are seamlessly replace by menu items, like at 0:13.
etc, etc......

There are a lot of things you could do with this, like having the menu items
continue to move around the screen.  The only reason that I have it starting
off with text items first is that I can have the text fly around with cool
effects, and then have stationary menu points that would be instantly
redrawn in the same place if the menu timed out and restarted again at 0:13.

This wouldn't be quite as full featured as the DVD menuing system, but it
would be close.  And, again, it would be extensible.  And, it should be
streamable and easy to fit into OGG.

Of course, all of this would require that there either be a filter or player
that could understand the menu/control track information to interact with
with it and allow information from that track to move the seekbar to another
position and change the tracks being displayed (so you could play the actual
video the menu was for).  A proper crossplatform full-featured codec API
system would also help.


P.S.  I'm posting this also at corecodec.com and possibly at doom9 for those
that aren't on the mailing list.

More information about the Matroska-devel mailing list