Architecture of libmd

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

collates (i.e., combines and orders) the metadata field values returned from
plugins

Plugin management

This layer:

parses the configuration file to learn which 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
metadata fields 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.

The file types and their associated URL prefixes supported by libmd
are:

File type

URL prefix

CDDA track

cdda:

POSIX file

file:

iPod media file

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).

MDPs hide the details of the media interface used for reading metadata so clients can
extract it through different network protocols 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

iPods

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.