Multimedia

Besides providing access to media devices, the multimedia subsystem reads and interprets metadata, converts audio/video streams, and manages playlists. The subsystem also provides the business logic for retrieving album art, directing track playback, detecting media sources, and presenting media to the user for selection.

The media browsing and playback engine is decoupled from the media rendering engine, allowing various HMI components to interact with iPods, USB sticks, and other media devices. The multimedia design is shown in this diagram:

Figure 1. Architecture of media browsing and playback subsystems in HTML5 and Qt5 HMIs

HMI interaction with media playback services

Both the HTML5 and Qt5 versions of the HMI include the Media Player app but they provide separate mechanisms to this application for sending requests to mm-player, which is the back-end media browsing and playback service. In the HTML5 HMI, Media Player communicates with mm-player by sending requests and receiving media information through the car.mediaplayer plugin, which runs within the browser engine. In the Qt5 HMI, Media Player makes calls to functions in the QPlayer library, which talks to mm-player. The mm-player service uses QDB to retrieve media information from databases and uses mm-renderer to control the media flow during playback.

Multimedia detection and synchronization binaries

The platform includes utilities that can detect when the user attaches a device and then respond to this action by synchronizing the metadata describing the device's media content to an embedded database. The synchronization ensures that the database has up-to-date media information before any tracks can be played.

Multimedia detection and synchronization relies on the following binaries:

/bin/usblauncher
This service enumerates USB devices, launches drivers for communicating with those devices, and publishes their hardware information in PPS.
/usr/sbin/mcd
The mcd utility (media content detector or MCD) mounts filesystems of attached devices so their contents can be read by other programs.
/usr/sbin/mm-detect
This service calls mm-sync to initiate media synchronization, notifies the Media Player about device attachments and detachments, and provides synchronization status updates.
/usr/sbin/mm-sync
This service synchronizes the information of media files on mass storage devices with the contents of QDB databases, which can then be read by the Media Player.
/usr/sbin/qdb
The QNX Database Server (QDB) utility manages the embedded databases that store multimedia information.
/usr/sbin/artwork_client_car2
This media utility uploads artwork found on devices, such as album cover art and thumbnail graphics, to QDB databases.

Multimedia browsing and playback binaries

Through the multimedia browsing and playback service, applications can discover media content on attached devices, control the playback of audio and video tracks or playlists, and retrieve the current playback status and notifications of status changes.

The following binaries manage media browsing and playback:

/usr/sbin/mm-player
Browsing and playback commands sent from the HMI Media Player are processed by the mm-player service. This program uses device-specific libraries to explore media filesystems, retrieve metadata from tracks and playlists, and initiate media flow for playback. It also interacts with mm-renderer to direct the media flow to the specified outputs.
/usr/sbin/mm-renderer
The mm-renderer service manages the flow of media content from one input to one or many outputs. A media flow can be directed to an audio or video output device for playback or to a file for recording.