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.
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 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.
Supported file types
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).
Supported device types
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.