[ English | 简体中文 ]
Media Session API
Media playback control and state synchronization, supporting the controller-controllee model.
Header: #include <media_session.h>
openvela Implementation Notes
- Controller-controllee model: Supports two roles
- Controller: Opened via
media_session_open, sends playback control commands to the currently active media - Controllee: Registered via
media_session_register, receives control commands and reports state
- Controller: Opened via
- Synchronous/asynchronous dual model:
media_session_*(synchronous) andmedia_uv_session_*(asynchronous, based on libuv) - Control commands: start / stop / pause / seek / prev_song / next_song / volume, etc.
- State queries: The controller can query the current playback state, position, duration, volume, etc.
- State notifications: The controllee pushes playback state changes to the controller via
notify/update
Controller Interfaces - Lifecycle
media_session_open
void* media_session_open(const char* params);
Open a media session controller.
Parameters:
paramsNULL, currently unused.
Returns:
void* The controller handle, or NULL on failure.
media_session_close
int media_session_close(void* handle);
Close a media session controller.
Parameters:
handleController handle.
Returns:
Returns 0 on success, or a negative errno on failure.
media_session_set_event_callback
int media_session_set_event_callback(void* handle, void* cookie, media_event_callback on_event);
Set an event callback to receive messages from the controllee.
Parameters:
handleController handle.cookieCallback argument foron_event.on_eventEvent callback function.
Returns:
Returns 0 on success, or a negative error code on failure.
Controller Interfaces - Playback Control
media_session_start
int media_session_start(void* handle);
Request to start playback.
Parameters:
handleController handle.
Returns:
Returns 0 on success, or a negative errno on failure.
media_session_stop
int media_session_stop(void* handle);
Request to stop playback.
Parameters:
handleController handle.
Returns:
Returns 0 on success, or a negative errno on failure.
media_session_pause
int media_session_pause(void* handle);
Request to pause playback.
Parameters:
handleController handle.
Returns:
Returns 0 on success, or a negative errno on failure.
media_session_seek
int media_session_seek(void* handle, unsigned position);
Request to seek to the specified position.
Parameters:
handleController handle.positionStart position, in milliseconds.
Returns:
Returns 0 on success, or a negative errno on failure.
media_session_prev_song
int media_session_prev_song(void* handle);
Request to play the previous song.
Parameters:
handleController handle.
Returns:
Returns 0 on success, or a negative errno on failure.
media_session_next_song
int media_session_next_song(void* handle);
Request to play the next song.
Parameters:
handleController handle.
Controller Interfaces - Volume Control
Returns:
Returns 0 on success, or a negative errno on failure.
media_session_increase_volume
int media_session_increase_volume(void* handle);
Request to increase the volume.
Parameters:
handleController handle.
Returns:
Returns 0 on success, or a negative errno on failure.
media_session_decrease_volume
int media_session_decrease_volume(void* handle);
Request to decrease the volume.
Parameters:
handleController handle.
Returns:
Returns 0 on success, or a negative errno on failure.
media_session_set_volume
int media_session_set_volume(void* handle, int volume);
Request to set the volume.
Parameters:
handleController handle.volumeVolume level.
Returns:
Returns 0 on success, or a negative error code on failure.
Note:
- This API is not implemented yet.
Controller Interfaces - State Queries
media_session_query
int media_session_query(void* handle, const media_metadata_t** data);
Query metadata from the most active controllee.
Parameters:
handleController handle.dataOutput pointer to receive the metadata pointer.
Returns:
Returns 0 on success, or a negative error code on failure.
media_session_get_state
int media_session_get_state(void* handle, int* state);
Get the overall status.
Parameters:
handleController handle.stateCurrent state.
Returns:
Returns 0 on success, or a negative error code on failure.
media_session_get_position
int media_session_get_position(void* handle, unsigned* position);
Get the current position in milliseconds.
Parameters:
handleController handle.positionCurrent position, in milliseconds.
Returns:
Returns 0 on success, or a negative error code on failure.
media_session_get_duration
int media_session_get_duration(void* handle, unsigned* duration);
Get the total duration in milliseconds.
Parameters:
handleController handle.durationCurrent total duration, in milliseconds.
Returns:
Returns 0 on success, or a negative error code on failure.
media_session_get_volume
int media_session_get_volume(void* handle, int* volume);
Get the current volume index.
Parameters:
handleController handle.volumeVolume level.
Returns:
Returns 0 on success, or a negative error code on failure.
Controllee Interfaces
media_session_register
void* media_session_register(void* cookie, media_event_callback on_event);
Register as a session controllee.
Parameters:
cookieCallback argument ofon_event.on_eventEvent callback function.
Returns:
Returns the controllee handle on success, or NULL on failure.
media_session_unregister
int media_session_unregister(void* handle);
Unregister the session controllee.
Parameters:
handleControllee handle.
Returns:
Returns 0 on success, or a negative errno on failure.
media_session_notify
int media_session_notify(void* handle, int event, int result, const char* extra);
Notify the result of a control message. After receiving MEDIA_EVENT_* from on_event, as the controllee you should handle the control message; after acknowledging it, call this API to send the response to the controller.
Parameters:
handleControllee handle.eventMEDIA_EVENT_*resultOperation result;0on success, a negative errno on failure.extraAdditional message.
Returns:
Returns 0 on success, or a negative errno on failure.
media_session_update
int media_session_update(void* handle, const media_metadata_t* data);
Update metadata to the session.
Parameters:
handleControllee handle.dataMetadata to update.
Asynchronous Interfaces (libuv-based)
The following interfaces are available only when CONFIG_LIBUV is enabled; both the controller and the controllee have corresponding asynchronous versions.
Returns:
Returns 0 on success, or a negative errno on failure.
media_uv_session_open
void* media_uv_session_open(void* loop, char* params, media_uv_callback on_open, void* cookie);
Open an async session controller.
Parameters:
loopTheuv_loop_t*event loop handle of the current thread.paramsCurrently unused.on_openCallback triggered after opening completes.cookieCallback context shared byon_open,on_event, andon_close.
Returns:
Returns the async controller handle on success.
media_uv_session_close
int media_uv_session_close(void* handle, media_uv_callback on_close);
Close the async controller handle.
Parameters:
handleAsync controller handle to destroy.on_closeCallback triggered after closing completes.
Returns:
Returns 0 on success, or a negative error code on failure.
media_uv_session_listen
int media_uv_session_listen(void* handle, media_event_callback on_event);
Listen to events from the controllee.
Parameters:
handleAsync controller handle.on_eventEvent callback function.
Returns:
Returns 0 on success, or a negative error code on failure.
media_uv_session_start
int media_uv_session_start(void* handle, media_uv_callback on_start, void* cookie);
Request to start playback.
Parameters:
handleAsync controller handle.on_startResult callback function.cookieCallback argument ofon_start.
Returns:
Returns 0 on success, or a negative errno on failure.
media_uv_session_stop
int media_uv_session_stop(void* handle, media_uv_callback on_stop, void* cookie);
Request to stop playback.
Parameters:
handleAsync controller handle.on_stopResult callback function.cookieCallback argument ofon_stop.
Returns:
Returns 0 on success, or a negative errno on failure.
media_uv_session_pause
int media_uv_session_pause(void* handle, media_uv_callback on_pause, void* cookie);
Request to pause playback.
Parameters:
handleAsync controller handle.on_pauseResult callback function.cookieCallback argument ofon_pause.
Returns:
Returns 0 on success, or a negative errno on failure.
media_uv_session_seek
int media_uv_session_seek(void* handle, unsigned position, media_uv_callback on_seek, void* cookie);
Request to seek to the specified position.
Parameters:
handlePlayer handle.positionStart position, in milliseconds.on_seekResult callback function.cookieCallback argument ofon_seek.
Returns:
Returns 0 on success, or a negative errno on failure.
media_uv_session_prev_song
int media_uv_session_prev_song(void* handle, media_uv_callback on_pre_song, void* cookie);
Request to play the previous song.
Parameters:
handleAsync controller handle.on_prevResult callback function.cookieCallback argument ofon_prev.
Returns:
Returns 0 on success, or a negative errno on failure.
media_uv_session_next_song
int media_uv_session_next_song(void* handle, media_uv_callback on_next, void* cookie);
Request to play the next song.
Parameters:
handleAsync controller handle.on_nextResult callback function.cookieCallback argument ofon_next.
Returns:
Returns 0 on success, or a negative errno on failure.
media_uv_session_increase_volume
int media_uv_session_increase_volume(void* handle, media_uv_callback on_increase, void* cookie);
Request to increase the volume.
Parameters:
handleAsync controller handle.on_increaseResult callback function.cookieCallback argument ofon_increase.
Returns:
Returns 0 on success, or a negative errno on failure.
media_uv_session_decrease_volume
int media_uv_session_decrease_volume(void* handle, media_uv_callback on_decrease, void* cookie);
Request to decrease the volume.
Parameters:
handleAsync controller handle.on_decreaseResult callback function.cookieCallback argument ofon_decrease.
Returns:
Returns 0 on success, or a negative errno on failure.
media_uv_session_set_volume
int media_uv_session_set_volume(void* handle, int volume, media_uv_callback on_set_volume, void* cookie);
Request to set the volume.
Parameters:
handleAsync controller handle.VolumeVolume level.on_volumeResult callback function.cookieCallback argument ofon_volume.
Returns:
Returns 0 on success, or a negative error code on failure.
Note:
- This API is not implemented yet.
media_uv_session_query
int media_uv_session_query(void* handle, media_uv_object_callback on_query, void* cookie);
Query the full state information.
Parameters:
handleAsync controller handle.on_queryCallback that receives the metadata pointer.cookieCallback argument.
Returns:
Returns 0 on success, or a negative error code on failure.
media_uv_session_get_state
int media_uv_session_get_state(void* handle, media_uv_int_callback on_state, void* cookie);
Get the current state.
Parameters:
handleAsync controller handle.on_stateResult callback function.cookieCallback argument ofon_state.
Returns:
Returns 0 on success, or a negative error code on failure.
Note:
- This API is not implemented yet. Use
media_uv_session_queryinstead.
media_uv_session_get_position
int media_uv_session_get_position(void* handle, media_uv_unsigned_callback on_position, void* cookie);
Get the current playback position.
Parameters:
handleAsync controller handle.on_positionResult callback function.cookieCallback argument ofon_position.
Returns:
Returns 0 on success, or a negative error code on failure.
Note:
- This API is not implemented yet. Use
media_uv_session_queryinstead.
media_uv_session_get_duration
int media_uv_session_get_duration(void* handle, media_uv_unsigned_callback on_duration, void* cookie);
Get the current duration.
Parameters:
handleAsync controller handle.on_durationResult callback function.cookieCallback argument ofon_duration.
Returns:
Returns 0 on success, or a negative error code on failure.
Note:
- This API is not implemented yet. Use
media_uv_session_queryinstead.
media_uv_session_get_volume
int media_uv_session_get_volume(void* handle, media_uv_int_callback on_get_volume, void* cookie);
Get the current volume.
Parameters:
handleAsync controller handle.on_volumeResult callback function.cookieCallback argument ofon_volume.
Returns:
Returns 0 on success, or a negative error code on failure.
Note:
- This API is not implemented yet. Use
media_uv_session_queryinstead.
media_uv_session_register
void* media_uv_session_register(void* loop, const char* params, media_event_callback on_event, void* cookie);
Register as a session controllee to receive control messages.
Parameters:
loopTheuv_loop_t*event loop handle of the current thread.paramsUnused; passNULL.on_eventCallback to receive control messages.cookieCallback argument.
Returns:
void* Async controllee handle, or NULL on failure.
media_uv_session_unregister
int media_uv_session_unregister(void* handle, media_uv_callback on_release);
Unregister self.
Parameters:
handleAsync controllee handle.on_releaseResource release callback for the caller.
Returns:
Returns 0 on success, or a negative errno on failure.
media_uv_session_notify
int media_uv_session_notify(void* handle, int event, int result, const char* extra, media_uv_callback on_notify, void* cookie);
Notify the result of a control message. After receiving MEDIA_EVENT_* from on_event, as the controllee you should handle the control message; after acknowledging it, call this API to send the response to the controller.
Parameters:
handleAsync controllee handle.eventThe event to notify.resultEvent result; usually0on success, a negative errno on failure.extraAdditional string message for the event; passNULLwhen not needed.on_notifyNotification acknowledgment callback.cookieCallback argument.
Returns:
Returns 0 on success, or a negative errno on failure.
media_uv_session_update
int media_uv_session_update(void* handle, const media_metadata_t* data, media_uv_callback on_update, void* cookie);
Update metadata to the session.
Parameters:
handleAsync controllee handle.dataMetadata to update.on_updateUpdate acknowledgment callback.cookieCallback argument.
Returns:
Returns 0 on success, or a negative errno on failure.