Control object for mm-control mediaplayer
The mm-control manager conveniently ties together media outputs, zones, tracksessions, and renderer control. It provides a simple interface for HMIs that have limited access to native calls.
Commands sent to the /pps/services/mm-control/control object are of the form:
msg::command_string\nid::ID_number\ndat:json:{JSON_data}
Responses always reflect the command_string and ID_number that were sent in the message, along with any errors:
res::command_string\nid::ID_number\ndat:json:{JSON_data}\nerr::errno_number\nerrstr::error_description
msg:: | id:: | dat:json: |
---|---|---|
output_create | Number | {"name":"output_name", "url":"output url", "type":"output type"} |
output_destroy | Number | {"name":"output_name"} |
echo 'msg::output_create\nid::1\ndat:json:{"name":"output0", "url":"snd:pcmPreferredp","type":"audio"}' >> /pps/services/mm-control/control
echo 'msg::output_destroy\nid::2\ndat:json:{"name":"output0"}' >> /pps/services/mm-control/control
res:: | id:: | dat:json: | err:: | errstr:: |
---|---|---|---|---|
output_create | Number | n/a | EBUSY | "Output name already exists" |
output_destroy | Number | n/a | ENOENT | "Couldn't find output name" |
Zones are containers for collecting outputs into sets that can be atomically added to or removed from players.
msg:: | id:: | dat:json: |
---|---|---|
zone_attach_outputs | Number | {"name":"zone_name", "outputs":["output name",…]} |
zone_create | Number | {"name":"zone_name"} |
zone_destroy | Number | {"name":"zone_name"} |
zone_detach_outputs | Number | {"name":"zone_name", "outputs":["output name",…]} |
echo 'msg::zone_create\nid::3\ndat:json:{"name":"zone0"}' >> /pps/services/mm-control/control
echo 'msg::zone_destroy\nid::4\ndat:json:{"name":"zone0"}' >> /pps/services/mm-control/control
echo 'msg::zone_attach_outputs\nid::5\ndat:json:{"name":"zone0", "outputs":["output0"]}' >> /pps/services/mm-control/control
echo 'msg::zone_detach_outputs\nid::6\ndat:json:{"name":"zone0", "outputs":["output0"]}' >> /pps/services/mm-control/control
res:: | id:: | dat:json: | err:: | errstr:: |
---|---|---|---|---|
zone_attach_outputs | Number | n/a | errno_number | as appropriate |
zone_create | Number | n/a | errno_number | as appropriate |
zone_destroy | Number | n/a | errno_number | as appropriate |
zone_detach_outputs | Number | n/a | errno_number | as appropriate |
Use tracksessions to provide a collection of tracks to a player.
msg:: | id:: | dat:json: |
---|---|---|
trksession_create | Number | {"name":"trksession_name", "media_source":"attribute name in /pps/services/mm-detect/status"} |
trksession_delete | Number | {"name":"trksession_name"} |
trksession_get_range | Number | {"name":"trksession_name","start":start,"end":end, "type":"random|sequential"} |
trksession_import | Number | {"name":"trksession_name","url":"sql"} |
trksession_randomize_range | Number | {"name": "trksession_name","start": start,"end": end} |
echo 'msg::trksession_create\nid::7\ndat:json:{"name":"mtrksession", "media_source":"dbmme"}' >> /pps/services/mm-control/control
echo 'msg::trksession_import\nid::8\ndat:json:{"name":"mtrksession", "url":"SELECT mediastore_metadata.mountpath || folders.basepath || library.filename AS url, fid AS userdata from mediastore_metadata, folders, file WHERE file.folderid == folders.folderid ORDER BY fid;"}' >> /pps/services/mm-control/control
echo 'msg::trksession_randomize_range\nid::10\ndat:json:{"name": "mtrksession","start":0,"end":5}' >> /pps/services/mm-control/control
echo 'msg::trksession_get_range\nid::11\ndat:json:{"name": "mtrksession","start":0,"end":5,"type":"sequential"}' >> /pps/services/mm-control/control
echo 'msg::trksession_delete\nid::9\ndat:json:{"name":"mtrksession"}' >> /pps/services/mm-control/control
res:: | id:: | dat:json: | err:: | errstr:: |
---|---|---|---|---|
trksession_create | Number | n/a | errno_number | as appropriate |
trksession_get_range | Number | {"num":num, "entries": [{"fid":fid,"url":"url"},...]} | errno_number | as appropriate |
trksession_import | Number | {"trksession_size": int session_size} | errno_number | as appropriate |
trksession_randomize_range | Number | n/a | errno_number | as appropriate |
Players are used to play tracks from a tracksession. Players are created and referenced by name so that the HMI can connect to players created or started before the HMI is initialized.
For every player created, mm-control creates a PPS status object called /pps/services/mm-control/playername/status to publish the status associated with that player.
msg:: | id:: | dat:json: |
---|---|---|
player_attach_zone | Number | {"player":"player_name","zone":"zone name"} |
player_create | Number | {"name":"player_name"} |
player_current_track | Number | {"player":"player_name"} |
player_detach_zone | Number | {"player":"player_name","zone":"zone name"} |
player_next_track | Number | {"player":"player_name"} |
player_play | Number | {"player":"player_name","position":position_ms} |
player_previous_track | Number | {"player":"player_name"} |
player_set_current | Number | {"player":"player_name,"index":index} |
player_set_params | Number | {"player":"player_name,"type":"context|input|track","params":[{"key0":"value0"}, {"key1":"value1"},…]} |
player_set_position | Number | {"player":"player_name,"position":"position_ms"} |
player_set_read_mode | Number | {"player":"player_name,"mode":"random|sequential"} |
player_set_repeat_mode | Number | {"player":"player_name, "mode":"all|one|none"} |
player_set_speed | Number | {"player":"player_name","speed":speed} |
player_stop | Number | {"player":"player_name"} |
player_set_trksession | Number | {"player":"player_name","trksession":"trksession_name","idx":current_idx} |
echo 'msg::player_create\nid::9\ndat:json:{"name":"mptest"}' >> /pps/services/mm-control/control
echo 'msg::player_attach_zone\nid::12\ndat:json:{"player":"mptest", "zone":"zone0"}' >> /pps/services/mm-control/control
echo 'msg::player_detach_zone\nid::12\ndat:json:{"player":"mptest", "zone":"zone0"}' >> /pps/services/mm-control/control
echo 'msg::player_set_trksession\nid::13\ndat:json:{"player":"mptest", "trksession":"mtrksession","idx":0}' >> /pps/services/mm-control/control
echo 'msg::player_set_speed\nid::14\ndat:json:{"player":"mptest", "speed":0}' >> /pps/services/mm-control/control
echo 'msg::player_set_position\nid::14\ndat:json:{"player":"mptest", "position":"100000"}' >> /pps/services/mm-control/control
echo 'msg::player_set_read_mode\nid::17\ndat:json:{"player":"mptest", "mode":"random"}' >> /pps/services/mm-control/control
echo 'msg::player_set_repeat_mode\nid::17\ndat:json:{"player":"mptest", "repeatmode":"all"}' >> /pps/services/mm-control/control
echo 'msg::player_set_current\nid::14\ndat:json:{"player":"mptest", "index":2}' >> /pps/services/mm-control/control
echo 'msg::player_play\nid::13\ndat:json:{"player":"mptest"}' >> /pps/services/mm-control/control
echo 'msg::player_stop\nid::17\ndat:json:{"player":"mptest"}' >> /pps/services/mm-control/control
echo 'msg::player_previous_track\nid::17\ndat:json:{"player":"mptest"}' >> /pps/services/mm-control/control
echo 'msg::player_next_track\nid::16\ndat:json:{"player":"mptest"}' >> /pps/services/mm-control/control
echo 'msg::player_current_track\nid::15\ndat:json:{"player":"mptest"}' >> /pps/services/mm-control/control
echo 'msg::player_set_params\nid::14\ndat:json:{"player":"mptest", "type":"track","params":[{"language":"english"}]}' >> /pps/services/mm-control/control
res:: | id:: | dat:json: | err:: | errstr:: |
---|---|---|---|---|
player_attach_zone | Number | n/a | errno_number | as appropriate |
player_create | Number | {"status_path":"path to the status object for this player"} | errno_number | as appropriate |
player_current_track | Number | {"trk_id":idx,"fid":fid,"url":"url"} | errno_number | as appropriate |
player_detach_zone | Number | n/a | errno_number | as appropriate |
player_next_track | Number | {"trk_id":idx,"fid":fid,"url":"url"} | errno_number | as appropriate |
player_play | Number | {"trk_id":fid} | errno_number | as appropriate |
player_previous_track | Number | {"trk_id":idx,"fid":fid,"url":"url"} | errno_number | as appropriate |
player_set_current | Number | n/a | errno_number | as appropriate |
player_set_params | Number | n/a | errno_number | as appropriate |
player_set_position | Number | n/a | errno_number | as appropriate |
player_set_read_mode | Number | n/a | errno_number | as appropriate |
player_set_repeat_mode | Number | n/a | errno_number | as appropriate |
player_set_speed | Number | n/a | errno_number | as appropriate |
player_set_trksession | Number | n/a | errno_number | as appropriate |
player_stop | Number | n/a | errno_number | as appropriate |
State: | Description: |
---|---|
IDLE | No active trksession is set for the player. |
INVALID | An error has occurred; the player thread is dead. The player cannot accept any new commands from the HMI. |
PLAYING | The active trksession is playing. |
PAUSED | The active trksession is playing; the speed is set to zero. |
STOPPED | All other scenarios. |
When this command is called: | These attributes are published to the status object: |
---|---|
player_create |
|
player_play |
|
player_set_current |
|
player_set_trksession |
|
player_stop | If called when player is PLAYING or PAUSED:
|
msg:: | id:: | dat:json: |
---|---|---|
ipodout_enter | Number | {"name":"player_name","zone":"zone name", "mountpoint":"path to ipod"} |
ipodout_exit | Number | {"name":"player_name"} |
ipodout_pushuibutton | Number | {"name":"player_name", "direction":"left"|"right"|"up"|"down"|"select"|"menu",
"delay":int32, "repeat":int32}
Note:
The "delay" and "repeat" attributes inside the JSON object are optional (default is 0).
|
echo 'msg::ipodout_enter\nid::15\ndat:json:{"name":"mpipodout", "zone":"audio","mountpoint":"/fs/ipod0"}' >> /pps/services/mm-control/control
echo 'msg::ipodout_exit\nid::15\ndat:json:{"name":"mpipodout"}' >> /pps/services/mm-control/control
echo 'msg::ipodout_pushuibutton\nid::15\ndat:json:{"name":"mpipodout", "direction":"left"}' >> /pps/services/mm-control/control
echo 'msg::ipodout_pushuibutton\nid::15\ndat:json:{"name":"mpipodout", "direction":"right"}' >> /pps/services/mm-control/control
echo 'msg::ipodout_pushuibutton\nid::15\ndat:json:{"name":"mpipodout", "direction":"up"}' >> /pps/services/mm-control/control
echo 'msg::ipodout_pushuibutton\nid::15\ndat:json:{"name":"mpipodout", "direction":"down"}' >> /pps/services/mm-control/control
echo 'msg::ipodout_pushuibutton\nid::15\ndat:json:{"name":"mpipodout", "direction":"select"}' >> /pps/services/mm-control/control
echo 'msg::ipodout_pushuibutton\nid::15\ndat:json:{"name":"mpipodout", "direction":"menu"}' >> /pps/services/mm-control/control
res:: | id:: | dat:json: | err:: | errstr:: |
---|---|---|---|---|
ipodout_enter | Number | n/a | errno_number | as appropriate |
ipodout_exit | Number | n/a | errno_number | as appropriate |
ipodout_pushuibutton | Number | n/a | errno_number | as appropriate |