Multimedia Synchronization Overview

The multimedia synchronizer service, mm-sync, synchronizes mediastore information with the contents of persistent storage. Synchronization involves extracting file and media metadata from devices and uploading that information into QDB databases.

Each mediastore has its own database that contains metadata such as the media types of its individual files, track names, cover art, and so on. Using databases for storage offers applications an efficient way of obtaining media metadata because they can simply query databases instead of searching the filesystems of external devices and then retrieving file information through system calls.

Another advantage to this design is that applications can view media information about any device that has been synchronized, even if that device is no longer present on the system.

The mm-sync service can:

Client applications can use mm-sync to synchronize some or all mediastore content at any time through API calls. The extracted media information helps these applications to find, organize, and play media, as well as provide end users with helpful and up-to-date information.

The mm-sync service selects the best synchronizer for a given mediastore to ensure users have the most accurate and complete metadata. The synchronization proceeds in steps and uses the QDB database server to transfer the uploaded information into persistent storage.

Mediastore insertions or removals are not detected by mm-sync. Applications can make system calls (e.g., readdir()) to search for attached mediastores that are mounted in the local filesystem, and then manually synchronize their contents with mm-sync.

Changes in device filesystems, such as individual file additions or removals, are also not detected by mm-sync. Applications must explicitly synchronize mediastore content to guarantee up-to-date file information for their users. An advantage of this approach is that mm-sync won't do a synchronization for every mediastore insertion or change of content, which would consume many system resources and likely slow down client applications.