The mm-renderer consists of several abstraction layers:
- The messaging layer decodes client messages and delivers them to contexts. A context is an object capable of playing one piece of media at a time to a set of output devices. A context has a unique name and can have an input and a set of outputs associated with it. The input can contain both audio and video signals (for example, a movie), and the set of outputs can consist of both audio and video devices (for example, speakers and a screen).
- The context management layer:
- keeps track of the outputs attached to each context
- maps each output to the engine plugins that can support that output type
- selects the appropriate engine plugins and attaches them to the context
- preserves the context state between detaching and reattaching inputs
- delivers client requests (for example, 'play') to engine plugins
- The plugin management layer keeps track of all available plugins.