[ English | 简体中文 ]
Multimedia Player API
Audio and video playback supporting local files and network streaming.
Header: #include <media_player.h>
openvela Implementation Notes
- Synchronous/Asynchronous dual model: Two parallel sets of interfaces are provided
- Synchronous:
media_player_*series, calls return in the current thread - Asynchronous:
media_uv_player_*series, based on libuv event loop, requiresCONFIG_LIBUV
- Synchronous:
- Lifecycle:
opencreates the player →preparesets the source →startbegins playback →stop/closereleases resources - Data sources: Two input methods are supported
- Local/network URL: Specify directly via
prepare(url) - Byte stream buffer: Push via
write_data, or obtain the underlying socket viaget_socket
- Local/network URL: Specify directly via
- Event callback: Register an event listener via
set_event_callbackto receive playback state changes, errors, and other notifications - Parameter configuration: Common parameters are read/written via
set_property/get_property(e.g., sample rate, channel count)
Synchronous Interface - Lifecycle
media_player_open
void* media_player_open(const char* stream);
Opens a player for the specified stream type.
Parameters:
streamStream type constant. Different stream types have different routing logic.
Returns:
Returns the player handle on success, or NULL on failure.
media_player_close
int media_player_close(void* handle, int pending_stop);
Closes the player.
Parameters:
handlePlayer handle.pending_stopWhether to wait for stop to complete before closing: 0 means stop immediately and close, 1 means wait for the current track to finish before closing. This parameter is only effective for audio players; setting it to 1 for video players has no waiting effect.
Returns:
Returns 0 on success, or a negated errno on failure.
media_player_set_event_callback
int media_player_set_event_callback(void* handle, void* event_cookie, media_event_callback on_event);
Sets the event callback to monitor stream state changes.
Parameters:
handlePlayer handle.event_cookieCallback context parameter.on_eventEvent callback function for receiving stream state change notifications.
Returns:
Returns 0 on success, or a negated error code on failure.
media_player_prepare
int media_player_prepare(void* handle, const char* url, const char* options);
Prepares the playback resource.
Parameters:
handlePlayer handle.urlResource path, supporting two modes: 1. URL mode:urlis a local file path or network address, the framework reads and plays it; 2. BUFFER mode:urlisNULL, the caller must continuously push data viamedia_player_write_data()ormedia_player_get_socket()+write().optionsAdditional configuration parameters for the resource, typically key-value pairs describing the resource format (e.g.,"format=s16le,sample_rate=44100,channels=2").
Returns:
Returns 0 on success, or a negated error code on failure.
media_player_reset
int media_player_reset(void* handle);
Resets the player.
Parameters:
handlePlayer handle returned bymedia_player_open.
Returns:
Returns 0 on success, or a negated error code on failure.
Synchronous Interface - Data Stream
media_player_write_data
ssize_t media_player_write_data(void* handle, const void* data, size_t len);
Writes data to the player for playback.
Parameters:
handlePlayer handle.dataBuffer address.lenBuffer length to write.
Returns:
Returns the number of bytes sent on success, or a negated error code on failure.
media_player_get_sockaddr
int media_player_get_sockaddr(void* handle, struct sockaddr_storage* addr);
Gets the socket address information for buffer mode.
Parameters:
handlePlayer handle.addrSocket address information.
Returns:
Returns 0 on success, or a negated errno on failure.
media_player_get_socket
int media_player_get_socket(void* handle);
Gets the socket file descriptor for writing.
Parameters:
handlePlayer handle.
Returns:
Returns the socket file descriptor on success, or a negated error code on failure.
media_player_close_socket
void media_player_close_socket(void* handle);
Closes the socket file descriptor.
Parameters:
handlePlayer handle.
Synchronous Interface - Playback Control
media_player_start
int media_player_start(void* handle);
Starts or resumes playback of the audio source.
Parameters:
handlePlayer handle.
Returns:
Returns 0 on success, or a negated error code on failure.
media_player_stop
int media_player_stop(void* handle);
Stops playback and clears the audio source.
Parameters:
handlePlayer handle.
Returns:
Returns 0 on success, or a negated error code on failure.
media_player_pause
int media_player_pause(void* handle);
Pauses playback.
Parameters:
handlePlayer handle.
Returns:
Returns 0 on success, or a negated error code on failure.
media_player_seek
int media_player_seek(void* handle, unsigned int position);
Seeks to the specified position from the beginning.
Parameters:
handlePlayer handle.positionPosition in milliseconds.
Returns:
Returns 0 on success, or a negated error code on failure.
media_player_set_looping
int media_player_set_looping(void* handle, int loop);
Sets the loop count.
Parameters:
handlePlayer handle.loopLoop count;-1means infinite looping.
Returns:
Returns 0 on success, or a negated errno on failure.
Synchronous Interface - State Query
media_player_is_playing
int media_player_is_playing(void* handle);
Checks the current playing status.
Parameters:
handlePlayer handle.
Returns:
Returns a positive value if playing, zero if inactive, or a negative value on error.
media_player_get_position
int media_player_get_position(void* handle, unsigned int* position);
Gets the current playback position of the audio source.
Parameters:
handlePlayer handle.positionOutput position in milliseconds.
Returns:
Returns 0 on success, or a negated errno on failure.
media_player_get_duration
int media_player_get_duration(void* handle, unsigned int* duration);
Gets the total duration of the current audio source.
Parameters:
handlePlayer handle.durationOutput duration in milliseconds.
Returns:
Returns 0 on success, or a negated errno on failure.
media_player_get_latency
int media_player_get_latency(void* handle, unsigned int* latency);
Gets the latency of the current audio source.
Parameters:
handlePlayer handle.latencyOutput latency in frames.
Returns:
Returns 0 on success, or a negated errno on failure.
Synchronous Interface - Volume and Properties
media_player_set_volume
int media_player_set_volume(void* handle, float volume);
Sets the volume.
Parameters:
handlePlayer handle.volumeVolume value in the range[0.0, 1.0].
Returns:
Returns 0 on success, or a negated error code on failure.
media_player_get_volume
int media_player_get_volume(void* handle, float* volume);
Gets the volume.
Parameters:
handlePlayer handle.volumeOutput volume value in the range[0.0, 1.0].
Returns:
Returns 0 on success, or a negated errno on failure.
media_player_set_property
int media_player_set_property(void* handle, const char* target, const char* key, const char* value);
Sets a property on the player.
Parameters:
handlePlayer handle.targetTarget filter name.keyProperty key.valueProperty value.
Returns:
Returns 0 on success, or a negated errno on failure.
media_player_get_property
int media_player_get_property(void* handle, const char* target, const char* key, char* value, int value_len);
Gets a property from the player.
Parameters:
handlePlayer handle.targetTarget filter name.keyProperty key.valueOutput buffer.value_lenLength of the output buffer.
Returns:
Returns 0 on success, or a negated errno on failure.
Asynchronous Interface (libuv-based)
The following interfaces are only available when CONFIG_LIBUV is enabled. Callbacks execute on the uv_loop, avoiding blocking the calling thread.
media_uv_player_open
void* media_uv_player_open(void* loop, const char* stream, media_uv_callback on_open, void* cookie);
Opens an asynchronous player with the given stream type.
Parameters:
loopTheuv_loop_t*event loop handle for the current thread.streamStream type constant. Different stream types have different routing logic.on_openCallback function triggered when the open operation completes.cookieCallback context shared byon_open,on_event,on_connection, andon_close.
Returns:
Returns the player handle on success, or NULL on failure.
media_uv_player_listen
int media_uv_player_listen(void* handle, media_event_callback on_event);
Listens to status change events by setting a callback.
Parameters:
handleAsynchronous player handle.on_eventEvent callback function invoked upon notification.
Returns:
Returns 0 on success, or a negated errno on failure.
media_uv_player_close
int media_uv_player_close(void* handle, int pending, media_uv_callback on_close);
Closes the asynchronous player.
Parameters:
handleAsynchronous player handle.pendingWhether to close in pending mode.on_closeCallback function triggered when resource release completes.
Returns:
Returns 0 on success, or a negated error code for an invalid handle.
media_uv_player_prepare
int media_uv_player_prepare(void* handle, const char* url, const char* options, media_uv_object_callback on_connection, media_uv_callback on_prepare, void* cookie);
Prepares the audio source for playback.
Parameters:
handleAsynchronous player handle.urlResource path, supporting two modes: 1. URL mode:urlis a local file path or network address, the framework reads and plays it; 2. BUFFER mode:urlisNULL, the caller must continuously push data viamedia_player_write_data()ormedia_player_get_socket()+write().optionsAdditional configuration parameters for the resource, typically key-value pairs describing the resource format (e.g.,"format=s16le,sample_rate=44100,channels=2").on_connectionCallback function that receives theuv_pipe_tin BUFFER mode.on_prepareResult callback function.cookieCallback context foron_prepare.
Returns:
Returns 0 on success, or a negated error code on failure.
media_uv_player_reset
int media_uv_player_reset(void* handle, media_uv_callback on_reset, void* cookie);
Resets the player.
Parameters:
handleAsynchronous player handle.on_resetResult callback function.cookieCallback context foron_reset.
Returns:
Returns 0 on success, or a negated errno on failure.
media_uv_player_start_auto
int media_uv_player_start_auto(void* handle, const char* scenario, media_uv_callback on_start, void* cookie);
Plays or resumes the prepared audio source with automatic focus request.
Parameters:
handleAsynchronous player handle.scenarioScenario constant; different scenarios correspond to different focus priorities.on_startResult confirmation callback (for request/start operations).cookieCallback context foron_start.
Returns:
Returns 0 on success, or a negated errno on failure.
media_uv_player_start
int media_uv_player_start(void* handle, media_uv_callback on_start, void* cookie);
Plays or resumes the prepared resource.
Parameters:
handleAsynchronous player handle.on_startResult callback function.cookieCallback context foron_start.
Returns:
Returns 0 on success, or a negated errno on failure.
media_uv_player_pause
int media_uv_player_pause(void* handle, media_uv_callback on_pause, void* cookie);
Pauses playback.
Parameters:
handleAsynchronous player handle.on_pauseResult callback function.cookieCallback context foron_pause.
Returns:
Returns 0 on success, or a negated errno on failure.
media_uv_player_stop
int media_uv_player_stop(void* handle, media_uv_callback on_stop, void* cookie);
Stops playback and clears the prepared audio source.
Parameters:
handleAsynchronous player handle.on_stopResult callback function.cookieCallback context foron_stop.
Returns:
Returns 0 on success, or a negated errno on failure.
media_uv_player_set_volume
int media_uv_player_set_volume(void* handle, float volume, media_uv_callback on_volume, void* cookie);
Sets the player volume.
Parameters:
handleAsynchronous player handle.volumeVolume value in the range[0.0, 1.0].on_volumeResult callback function.cookieCallback context foron_volume.
Returns:
Returns 0 on success, or a negated error code on failure.
media_uv_player_get_volume
int media_uv_player_get_volume(void* handle, media_uv_float_callback on_volume, void* cookie);
Gets the player volume.
Parameters:
handleAsynchronous player handle.on_volumeResult callback function.cookieCallback context foron_volume.
Returns:
Returns 0 on success, or a negated errno on failure.
media_uv_player_get_playing
int media_uv_player_get_playing(void* handle, media_uv_int_callback on_playing, void* cookie);
Gets the current playing status.
Parameters:
handleAsynchronous player handle.on_playingResult callback function.cookieCallback context foron_playing.
Returns:
Returns 0 on success, or a negated errno on failure.
media_uv_player_get_position
int media_uv_player_get_position(void* handle, media_uv_unsigned_callback on_position, void* cookie);
Gets the current playback position.
Parameters:
handleAsynchronous player handle.on_positionResult callback function.cookieCallback context foron_position.
Returns:
Returns 0 on success, or a negated errno on failure.
media_uv_player_get_duration
int media_uv_player_get_duration(void* handle, media_uv_unsigned_callback on_duration, void* cookie);
Gets the duration of the current audio source.
Parameters:
handleAsynchronous player handle.on_durationResult callback function.cookieCallback context foron_duration.
Returns:
Returns 0 on success, or a negated errno on failure.
media_uv_player_get_latency
int media_uv_player_get_latency(void* handle, media_uv_unsigned_callback cb, void* cookie);
Gets the latency of the current audio source.
Parameters:
handleAsynchronous player handle.cbResult callback function.cookieCallback context forcb.
Returns:
Returns 0 on success, or a negated errno on failure.
media_uv_player_set_looping
int media_uv_player_set_looping(void* handle, int loop, media_uv_callback on_looping, void* cookie);
Sets the loop count.
Parameters:
handleAsynchronous player handle.loopLoop count;-1means infinite looping.on_loopingResult callback function.cookieCallback context foron_looping.
Returns:
Returns 0 on success, or a negated errno on failure.
media_uv_player_seek
int media_uv_player_seek(void* handle, unsigned int position, media_uv_callback on_seek, void* cookie);
Seeks to the specified position from the beginning.
Parameters:
handleAsynchronous player handle.positionTarget position in milliseconds.on_seekResult callback function.cookieCallback context foron_seek.
Returns:
Returns 0 on success, or a negated errno on failure.
media_uv_player_set_property
int media_uv_player_set_property(void* handle, const char* target, const char* key, const char* value, media_uv_callback on_setprop, void* cookie);
Sets a property on the player.
Parameters:
handleAsynchronous player handle.targetTarget filter name.keyProperty key.valueProperty value.on_setpropResult callback function.cookieCallback context foron_setprop.
Returns:
Returns 0 on success, or a negated errno on failure.
media_uv_player_get_property
int media_uv_player_get_property(void* handle, const char* target, const char* key, media_uv_string_callback on_getprop, void* cookie);
Gets a property from the player.
Parameters:
handleAsynchronous player handle.targetTarget filter name.keyProperty key.on_getpropResult callback function.cookieCallback context foron_getprop.
Returns:
Returns 0 on success, or a negated errno on failure.
media_uv_player_query
int media_uv_player_query(void* handle, media_uv_object_callback on_query, void* cookie);
Queries metadata of the player.
Parameters:
handleAsynchronous player handle.on_queryCallback function that receives the metadata pointer.cookieCallback context foron_query.
Returns:
Returns 0 on success, or a negated error code on failure.
media_uv_player_close_socket
int media_uv_player_close_socket(void* handle);
Closes the socket file descriptor.
Parameters:
handlePlayer handle.
Returns:
Returns 0 on success, or a negated error code on failure.