Media Explorer for developers

Architecture
Integration points with other libraries and services
User experience design
How it works
MVC
Class hierarchy
Content discovery
Binding keys to actions
Plugin management and configuration
Extending Media Explorer
What you need to know
Setting up a development environment
Enabling and configuring content sources

Architecture

Media Explorer is a single project, but it is composed of several interrelated libraries and applications. The points below explain these parts and where they live in the source tree:

  • libmex is a library containing the MVC framework, plugin framework, generic widgets, and other components used by the UX.

    It lives in the mex directory.

  • Media Explorer is the application, built with the libmex library. Note that the libmex classes could be used to build alternative UXs: see this diagram for a (very) high-level overview of the classes available.

    It lives in the shell directory.

  • The player (in a directory with the same name) exposes the Media Explorer player over DBus. The core functionality is documented in MexMediaDBUSBridge.

  • The plugins directory (in the source code) contains various Media Explorer plugins, which extend the functionality of the basic libmex library.

    This is where the Media Explorer Tracker plugin lives (in the tracker directory).

    Search and queue are also implemented as plugins, also in this directory.

Media Explorer also integrates with various other libraries and services, as described in this section.

Integration points with other libraries and services

Media Explorer was designed to integrate smoothly with the MeeGo software stack. Consequently, there are a number of points where Media Explorer integrates with other libraries and services; see this diagram for an overview (as seen by jhbuild dot).

  • GUPnPThis is part of the standard MeeGo UPnP stack. It is a low-level implementation that provides the raw UPnP protocol: it has no APIs for higher-level specifications such as MediaServer:1.

    Rygel (also part of MeeGo) is available as a ContentDirectory implementation for sharing media to other devices. However, this is not used at present.

  • TrackerThis is Media Explorer's metadata store. It holds metadata for both local and removable media, as well as caching data about any UPnP servers discovered. Local and removable media is indexed using standard Tracker methods.

  • GriloThis is a media discovery and metadata aggregation library which abstracts content browsing and searching. By default, Media Explorer uses Grilo to enable browsing and searching of local files and content on UPnP servers.

    Configuring other Grilo plugins can enable access to further content sources: see the section about configuring Grilo plugins for more details.

  • GStreamerThe media player is a GStreamer-based daemon with a DBus API. It uses the GStreamer playbin2 element for playback, so hardware acceleration is used if suitable elements are installed.

  • DBusThe media player exposes a DBus API to other applications.

  • ClutterClutter is a low-level drawing toolkit which abstracts and simplifies the OpenGL API. Clutter doesn't mandate a particular look and feel: this is provided by toolkits built on top of Clutter (like Mx, see below).

  • MxMx is a high-level toolkit built on top of Clutter. It provides an application model and a variety of widgets such as buttons, dialogs and toolbars.

Note

While Media Explorer was designed with MeeGo in mind, it is perfectly possible to build and run it on other distributions (e.g. Fedora). However, bear in mind that it uses some libraries which may either be unavailable for your distro (e.g. Mx, Grilo) or at versions which are too old (e.g. DBus, Tracker). If your distro is too outdated, one solution is to build Media Explorer with jhbuild: this section explains how.

User experience design

Input device

The input device is expected to have a 5-way d-pad (up/down/left/right/activate), back, information and home keys. These are the primary navigation keys, and are all that is required to use the majority of the UX. The remote is also expected to have a full alphanumeric keyboard, used for searching and in the web browser.

Because the UX doesn't support a mouse pointer, UX elements are activated by navigating to the element and pressing the activate button.

On a netbook, the inputs are mapped onto the keyboard as follows:

  • up/down/left/right = cursor keys

  • activate (a.k.a. ok) = return key

  • back = Esc key

  • information = right-click key (on my keyboard, it looks like a context menu)

  • home = the "Windows" key

Output device

720p is the only supported video mode. The display will be configured for the best mode approximating 720p, and if this isn't possible an error message will be displayed.

Views

The majority of the UX is based around two styles of view: panel and grid.

A panel view displays a number of panels (as columns across the screen); each has a header which can be activated to "drill down" from the summary to a more detailed view (another panel view or a grid view) showing a limited number of items (generally 8). Typically these items are the most relevant or recent. The remaining items are accessed by activating the panel heading, which changes the UX to show a grid view. When an item is activated, relevant metadata for the item and actions associated with it are displayed.

A grid view fills the screen with items and can be scrolled vertically. All of the items are included, and there is no implicit filtering.

Home screen

The home screen is a panel view, with columns for Search, Video, Photo, and Queue.

  • SearchThis is used to search all available media, i.e. local files, UPnP servers, Vimeo and so on.

    Search history is stored and presented to the user if available. Search results are presented in panels, organised by source; a user can drill down from any panel to a grid view of relevant results.

  • VideoThis displays available video content.

    Drilling down from the home screen will take you to the source view, where each source is another panel showing the 8 most recent videos from that source. Drilling down from the source panel will open the grid view, where all the content items from that source are visually presented as thumbnails. Any folder hierarchy is flattened and the content can be sorted in various ways.

    If there is only one source, drilling down from the home screen will go directly to the grid view.

  • PhotosVery similar to Video, but for still images. There are different controls available when viewing images, for example starting a slideshow or rotating the image.

  • QueueA queue of content to be played can be created by activating the items and selecting Add to Queue.

    If the item is already in a queue, this action becomes Remove from Queue.

Playback

When playing back media, the metaphor is that the controls and information are "below" the screen. These are arranged in rows; a user can navigate between the rows with the up and down keys. Specific controls in each row are traversed by using the left and right keys.

For videos, pressing the down key will slide up the pause and stop controls; pressing down again will slide up the seek bar; and again will bring up the Related Content list.

The Related Content row lists content that is related to the current content. If the media is from a directory, it lists media in the same directory; if from a search, the other results; and so on. This area could also be used to show recommended content or advertising.

For photos, the controls are different (rotate buttons, no seek bar, etc). Pressing up will slide these off the screen, resulting in just the photo being visible.

Media information

At any time in the Media Explorer, you can get information about the current displayed media or the currently selected media by pressing the info key.