The mm-player service uses a layered design to separate the application logic for the tasks of
managing client connections, validating commands, maintaining media source information, managing tracksessions, and
interfacing with devices.
The mm-player service consists of three layers:
- Client layer
-
This layer implements the client-side mm-player library
(libmmplayer), which:
-
- creates and returns connection handles to the client application
- detects basic parameter errors such as empty strings used for player names or media source IDs
- forwards API commands and their parameters to the mm-player server
- Server layer
-
This layer implements the mm-player server, which:
-
- opens and closes connections to players
- validates parameters before forwarding commands to the plugin layer
- publishes updates to player states through PPS
- manages tracksessions
- maintains a list of media sources
- Plugin layer
-
This layer consists of many plugins, each of which:
-
- notifies the mm-player server of important events, including but not limited to:
- a media source connection or disconnection
- a user-requested change in the playback position
- an error occurred when browsing or playing media
- creates and returns handles to "play sessions" and "browse sessions" to the server layer,
allowing that layer to direct commands to specific media sources
- uses platform services to carry out playback commands (e.g., play, stop, seek)