Here follows a brief explanation on some of the fundamental concepts around the MAFW framework. Most of them will be covered in more detail in further sections of this manual:
Renderer: An element capable of consuming multimedia content, this is, an element capable of controlling media playback.
Object Identifier: Sources identify multimedia resources using object identifiers. Each individual resource has one unique object identifier associated that is provided by the source serving it.
Shared playlist: A sorted list of multimedia resources ready to be consumed by a renderer, which can be used and manipulated by several applications in parallel. Playlists are populated with media items extracted from Source components, and assigned to a renderer to be played.
Extension: An element that implements a particular task by following a well defined interface. Currently, two types of extensions are supported, those that implement new Source components and those that implement new Renderer components. Also, extensions can be used in two manners:
In-Process extensions: Those that live in the same address space as the application that uses them.
Out-of-process extensions: Those that live in a separate process other than the application's. The benefit of this type of extensions is that programming flaws in the plugin code that lead to crashes or freezing of the extension, do not crash or freeze the main application. The main drawback of this approach is the need for inter-process communications to communicate the application and the extensions, which may have a performance hit and require some extra synchronization effort.
Plugin: A plugin is a shared object file implementing a particular extension. For example, in the case of a UPnP source plugin, the shared file implementing the source is the plugin, however, when the plugin is loaded by the framework it may instantiate several source extensions, one per UPnP server discovered.
Wrapper: In order to make inter-process communications in the case of out-of-process plugins transparent for application developers, all components that can live in a separate process (Extensions and Shared playlists), are wrapped with local objects that handle the inter-process communication transparently. Thanks to these wrapper objects, in most situations, application developers do not need to know if they are using in-process or out-of-process components. Although wrappers play an important role in MAFW, they are only interesting for developers interested in hacking the internals of the framework, multimedia application developers do not need to know about them.