The media-controller-server sample application demonstrates how you can create a custom media controller server type application. This sample application is based on a simple music application.
The following figure illustrates the main view of the media-controller-server sample application.
Figure: Media-controller server main view
Prerequisites
To ensure proper application execution, the following privilege must be set:
- http://tizen.org/privilege/mediacontroller.server
Implementation
To use the media controller server:
- Create a media controller server handle in the create_player() function. The function sets the callbacks to receive commands from the media controller client. To handle the incoming playback state command, define a callback and register it using the mc_server_set_playback_state_command_received_cb() function.
static void create_player(appdata_s *ad) { ret = mc_server_create(&ad->player_controller); if (ret != MEDIA_CONTROLLER_ERROR_NONE) { dlog_print(DLOG_ERROR, LOG_TAG, "mc_server_create() failed. err = %d", ret); return; } mc_server_set_playback_state_command_received_cb(ad->player_controller, _playback_state_cb, (void*)ad); mc_server_set_custom_command_received_cb(ad->player_controller, __custom_command_received_cb, (void*)ad); }
- Update the playback state, media metadata information, shuffle mode, and repeat mode in the play_media() function:
void play_media(media_info_h media_info, appdata_s *ad) { mc_server_set_metadata(ad->player_controller, MC_META_MEDIA_TITLE, file_name); mc_server_set_metadata(ad->player_controller, MC_META_MEDIA_ARTIST, artist); mc_server_set_metadata(ad->player_controller, MC_META_MEDIA_ALBUM, album); mc_server_set_metadata(ad->player_controller, MC_META_MEDIA_AUTHOR, author); mc_server_set_metadata(ad->player_controller, MC_META_MEDIA_GENRE, genre); mc_server_set_metadata(ad->player_controller, MC_META_MEDIA_DURATION, duration_c); mc_server_set_metadata(ad->player_controller, MC_META_MEDIA_DATE, date); mc_server_set_metadata(ad->player_controller, MC_META_MEDIA_COPYRIGHT, copyright); mc_server_set_metadata(ad->player_controller, MC_META_MEDIA_DESCRIPTION, description); mc_server_set_metadata(ad->player_controller, MC_META_MEDIA_TRACK_NUM, track_num); mc_server_update_metadata(ad->player_controller); // Update shuffle mode information for clients mc_server_update_shuffle_mode(ad->player_controller, MC_SHUFFLE_MODE_OFF); // Update repeat mode information for clients mc_server_update_repeat_mode(ad->player_controller, MC_REPEAT_MODE_ON); switch (player_state) { // Case when the player state is playing mc_server_set_playback_state(ad->player_controller, MC_PLAYBACK_STATE_PLAYING); mc_server_update_playback_info(ad->player_controller); // Case when the player state is paused mc_server_set_playback_state(ad->player_controller, MC_PLAYBACK_STATE_PAUSED); mc_server_update_playback_info(ad->player_controller); } }
- Handle the custom command in the mc_server_set_custom_command_received_cb() function and send a reply to the media controller client application with the mc_server_send_command_reply() function:
void __custom_command_received_cb(const char *client_name, const char *command, bundle *data, void *user_data) { ret = mc_server_send_command_reply(ad->player_controller, client_name, 0, bundle_reply); if (ret != MEDIA_CONTROLLER_ERROR_NONE) dlog_print(DLOG_ERROR, LOG_TAG, "mc_server_send_command_reply() failed. err = %d", ret); return; }
- Unset the callbacks with the mc_client_unset_xxx_command_received_cb() functions. The media controller server handle must be destroyed using the mc_server_destroy() function.
static void __destroy_player(appdata_s *ad) { ret = mc_server_unset_playback_state_command_received_cb(ad->player_controller); if (ret != MEDIA_CONTROLLER_ERROR_NONE) { dlog_print(DLOG_ERROR, LOG_TAG, "mc_server_unset_playback_state_command_received_cb() failed. err = %d", ret); } ret = mc_server_unset_custom_command_received_cb(ad->player_controller); if (ret != MEDIA_CONTROLLER_ERROR_NONE) { dlog_print(DLOG_ERROR, LOG_TAG, "mc_server_unset_playback_state_command_received_cb() failed. err = %d", ret); } ret = mc_server_destroy(ad->player_controller); if (ret != MEDIA_CONTROLLER_ERROR_NONE) { dlog_print(DLOG_ERROR, LOG_TAG, "mc_server_destroy() failed. err = %d", ret); } }