Architecture of libmd

The libmd library uses a plugin architecture in which independent plugins support different sets of metadata fields. Based on client requests, the library extracts these fields using one or more plugins and returns the set of filled-in metadata fields to the clients.

The library is implemented in three layers:
Data processing
This layer:
  • stores and updates the plugin ratings for metadata fields from specific media file types
  • collates (i.e., combines and orders) the metadata field values returned from plugins
Plugin management
This layer:
  • parses the configuration file to learn which DLL library files implement the plugins and to read the preference order for various file types
  • loads, initializes, and unloads plugins
Plugins
This layer consists of many Metadata Provider (MDP) plugins, each of which:
  • manages communication sessions for responding to metadata requests and for reporting errors
  • rates itself on its ability to retrieve the requested metadata fields
  • retrieves metadata by extracting media information from the named item (media file)

This design lets libmd offer a common, high-level interface for extracting metadata from many file types on many device types. Clients need to name only a media file and the metadata fields they want and libmd then invokes the necessary MDP plugins to read the metadata and returns the extracted field values to the client.

Each MDP fills in as many fields as it can. The order that libmd uses to invoke the MDPs depends on the plugin preferences stated in the configuration file. The preferential order for plugins can vary from one file type to another.

Supported file types

The supported file types and their associated URL prefixes are:
File type URL prefix
CDDA track cdda:
POSIX file file:
File on an Apple device ipod:
HTTP stream http:
RTSP stream rtsp:
File on an MTP device mtp:
Note: If no URL prefix is given, the POSIX file type is assumed (e.g., a URL of /fs/usb0/one.mp3 is equivalent to file:/fs/usb0/one.mp3).

Supported device types

MDPs hide the details of the media interface used for reading metadata so clients can extract it through different network protocols and from a variety of hardware. Clients can read metadata from the following device types:
  • USB sticks, SD cards, or any storage devices with block filesystems
  • Apple devices
  • audio CDs
  • MTP devices
  • media streams from external sources (e.g., HTTP servers)
Note: The plugin-based architecture makes it possible for future releases of libmd to support additional file and device types. The libmd library could add new MDPs to provide more sources of metadata while clients continue to use the same commands to extract it.