[ English | 简体中文 ]
媒体会话 API
媒体播放控制和状态同步,支持控制器-被控端模式。
头文件:#include <media_session.h>
openvela 实现说明
- 控制器-被控端模式:支持两种角色
- 控制器(Controller):通过
media_session_open打开,向当前活跃媒体发送播放控制命令 - 被控端(Controllee):通过
media_session_register注册,接收控制命令并上报状态
- 控制器(Controller):通过
- 同步/异步双模型:
media_session_*(同步)和media_uv_session_*(异步,基于 libuv) - 控制命令:start / stop / pause / seek / prev_song / next_song / volume 等
- 状态查询:控制器可查询当前播放状态、位置、时长、音量等
- 状态通知:被控端通过
notify/update向控制器推送播放状态变化
控制器接口 - 生命周期
media_session_open
void* media_session_open(const char* params);
打开媒体会话控制器。
参数:
params暂未使用,传NULL。
返回值:
成功时返回控制器句柄,失败时返回 NULL。
media_session_close
int media_session_close(void* handle);
关闭媒体会话控制器。
参数:
handle控制器句柄。
返回值:
成功时返回 0,失败时返回负的 errno。
media_session_set_event_callback
int media_session_set_event_callback(void* handle, void* cookie, media_event_callback on_event);
设置事件回调,接收被控端消息。
参数:
handle控制器句柄。cookie回调上下文参数。on_event事件回调函数。
返回值:
成功时返回 0,失败时返回负的错误码。
控制器接口 - 播放控制
media_session_start
int media_session_start(void* handle);
请求开始播放。
参数:
handle控制器句柄。
返回值:
成功时返回 0,失败时返回负的 errno。
media_session_stop
int media_session_stop(void* handle);
请求停止播放。
参数:
handle控制器句柄。
返回值:
成功时返回 0,失败时返回负的 errno。
media_session_pause
int media_session_pause(void* handle);
请求暂停播放。
参数:
handle控制器句柄。
返回值:
成功时返回 0,失败时返回负的 errno。
media_session_seek
int media_session_seek(void* handle, unsigned position);
请求跳转到指定位置。
参数:
handle控制器句柄。position目标位置,单位为毫秒。
返回值:
成功时返回 0,失败时返回负的 errno。
media_session_prev_song
int media_session_prev_song(void* handle);
请求播放上一首。
参数:
handle控制器句柄。
返回值:
成功时返回 0,失败时返回负的 errno。
media_session_next_song
int media_session_next_song(void* handle);
请求播放下一首。
参数:
handle控制器句柄。
返回值:
成功时返回 0,失败时返回负的 errno。
控制器接口 - 音量控制
media_session_increase_volume
int media_session_increase_volume(void* handle);
请求增大音量。
参数:
handle控制器句柄。
返回值:
成功时返回 0,失败时返回负的 errno。
media_session_decrease_volume
int media_session_decrease_volume(void* handle);
请求减小音量。
参数:
handle控制器句柄。
返回值:
成功时返回 0,失败时返回负的 errno。
media_session_set_volume
int media_session_set_volume(void* handle, int volume);
请求设置音量。
参数:
handle控制器句柄。volume音量档位。
返回值:
成功时返回 0,失败时返回负的错误码。
注意:
- 此接口尚未实现。
控制器接口 - 状态查询
media_session_query
int media_session_query(void* handle, const media_metadata_t** data);
查询当前最活跃被控端的元数据。
参数:
handle控制器句柄。data用于接收元数据指针的输出参数。
返回值:
成功时返回 0,失败时返回负的错误码。
media_session_get_state
int media_session_get_state(void* handle, int* state);
获取当前播放状态。
参数:
handle控制器句柄。state输出参数,当前播放状态。
返回值:
成功时返回 0,失败时返回负的错误码。
media_session_get_position
int media_session_get_position(void* handle, unsigned* position);
获取当前播放位置。
参数:
handle控制器句柄。position输出参数,当前位置,单位为毫秒。
返回值:
成功时返回 0,失败时返回负的错误码。
media_session_get_duration
int media_session_get_duration(void* handle, unsigned* duration);
获取当前音频源的总时长。
参数:
handle控制器句柄。duration输出参数,总时长,单位为毫秒。
返回值:
成功时返回 0,失败时返回负的错误码。
media_session_get_volume
int media_session_get_volume(void* handle, int* volume);
获取当前音量。
参数:
handle控制器句柄。volume输出参数,当前音量档位。
返回值:
成功时返回 0,失败时返回负的错误码。
被控端接口
media_session_register
void* media_session_register(void* cookie, media_event_callback on_event);
注册为媒体会话被控端。
参数:
cookie回调上下文参数。on_event事件回调函数,用于接收控制命令。
返回值:
成功时返回被控端句柄,失败时返回 NULL。
media_session_unregister
int media_session_unregister(void* handle);
取消注册被控端。
参数:
handle被控端句柄。
返回值:
成功时返回 0,失败时返回负的 errno。
media_session_notify
int media_session_notify(void* handle, int event, int result, const char* extra);
通知控制器控制命令的处理结果。被控端收到 MEDIA_EVENT_* 事件后,完成相应处理,再调用此接口向控制器发送响应。
参数:
handle被控端句柄。event要响应的事件类型(MEDIA_EVENT_*)。result操作结果,成功时为0,失败时为负的 errno。extra附加消息字符串,不需要时传NULL。
返回值:
成功时返回 0,失败时返回负的 errno。
media_session_update
int media_session_update(void* handle, const media_metadata_t* data);
向会话更新元数据。
参数:
handle被控端句柄。data要更新的元数据。
返回值:
成功时返回 0,失败时返回负的 errno。
异步接口(基于 libuv)
以下接口仅在启用 CONFIG_LIBUV 时可用,控制器与被控端均有对应异步版本。
media_uv_session_open
void* media_uv_session_open(void* loop, char* params, media_uv_callback on_open, void* cookie);
打开异步会话控制器。
参数:
loop当前线程的uv_loop_t*事件循环句柄。params暂未使用,传NULL。on_open打开完成后触发的回调函数。cookie回调上下文,供on_open、on_event、on_close共用。
返回值:
成功时返回异步控制器句柄,失败时返回 NULL。
media_uv_session_close
int media_uv_session_close(void* handle, media_uv_callback on_close);
关闭异步控制器。
参数:
handle异步控制器句柄。on_close关闭完成后触发的回调函数。
返回值:
成功时返回 0,失败时返回负的错误码。
media_uv_session_listen
int media_uv_session_listen(void* handle, media_event_callback on_event);
注册事件监听回调,接收被控端状态变化通知。
参数:
handle异步控制器句柄。on_event事件回调函数。
返回值:
成功时返回 0,失败时返回负的错误码。
media_uv_session_start
int media_uv_session_start(void* handle, media_uv_callback on_start, void* cookie);
请求开始播放。
参数:
handle异步控制器句柄。on_start结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。
media_uv_session_stop
int media_uv_session_stop(void* handle, media_uv_callback on_stop, void* cookie);
请求停止播放。
参数:
handle异步控制器句柄。on_stop结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。
media_uv_session_pause
int media_uv_session_pause(void* handle, media_uv_callback on_pause, void* cookie);
请求暂停播放。
参数:
handle异步控制器句柄。on_pause结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。
media_uv_session_seek
int media_uv_session_seek(void* handle, unsigned position, media_uv_callback on_seek, void* cookie);
请求跳转到指定位置。
参数:
handle异步控制器句柄。position目标位置,单位为毫秒。on_seek结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。
media_uv_session_prev_song
int media_uv_session_prev_song(void* handle, media_uv_callback on_pre_song, void* cookie);
请求播放上一首。
参数:
handle异步控制器句柄。on_pre_song结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。
media_uv_session_next_song
int media_uv_session_next_song(void* handle, media_uv_callback on_next, void* cookie);
请求播放下一首。
参数:
handle异步控制器句柄。on_next结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。
media_uv_session_increase_volume
int media_uv_session_increase_volume(void* handle, media_uv_callback on_increase, void* cookie);
请求增大音量。
参数:
handle异步控制器句柄。on_increase结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。
media_uv_session_decrease_volume
int media_uv_session_decrease_volume(void* handle, media_uv_callback on_decrease, void* cookie);
请求减小音量。
参数:
handle异步控制器句柄。on_decrease结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。
media_uv_session_set_volume
int media_uv_session_set_volume(void* handle, int volume, media_uv_callback on_set_volume, void* cookie);
请求设置音量。
参数:
handle异步控制器句柄。volume音量档位。on_set_volume结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的错误码。
注意:
- 此接口尚未实现。
media_uv_session_query
int media_uv_session_query(void* handle, media_uv_object_callback on_query, void* cookie);
查询完整状态信息。
参数:
handle异步控制器句柄。on_query结果回调函数,回调参数为元数据指针。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的错误码。
media_uv_session_get_state
int media_uv_session_get_state(void* handle, media_uv_int_callback on_state, void* cookie);
获取当前播放状态。
参数:
handle异步控制器句柄。on_state结果回调函数,回调参数为当前状态。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的错误码。
注意:
- 此接口尚未实现,请使用
media_uv_session_query替代。
media_uv_session_get_position
int media_uv_session_get_position(void* handle, media_uv_unsigned_callback on_position, void* cookie);
获取当前播放位置。
参数:
handle异步控制器句柄。on_position结果回调函数,回调参数为当前位置(毫秒)。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的错误码。
注意:
- 此接口尚未实现,请使用
media_uv_session_query替代。
media_uv_session_get_duration
int media_uv_session_get_duration(void* handle, media_uv_unsigned_callback on_duration, void* cookie);
获取当前音频源的总时长。
参数:
handle异步控制器句柄。on_duration结果回调函数,回调参数为总时长(毫秒)。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的错误码。
注意:
- 此接口尚未实现,请使用
media_uv_session_query替代。
media_uv_session_get_volume
int media_uv_session_get_volume(void* handle, media_uv_int_callback on_get_volume, void* cookie);
获取当前音量。
参数:
handle异步控制器句柄。on_get_volume结果回调函数,回调参数为当前音量档位。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的错误码。
注意:
- 此接口尚未实现,请使用
media_uv_session_query替代。
media_uv_session_register
void* media_uv_session_register(void* loop, const char* params, media_event_callback on_event, void* cookie);
注册为异步会话被控端,接收控制命令。
参数:
loop当前线程的uv_loop_t*事件循环句柄。params暂未使用,传NULL。on_event接收控制消息的回调函数。cookie回调上下文参数。
返回值:
成功时返回异步被控端句柄,失败时返回 NULL。
media_uv_session_unregister
int media_uv_session_unregister(void* handle, media_uv_callback on_release);
取消注册被控端。
参数:
handle异步被控端句柄。on_release资源释放完成后的回调函数。
返回值:
成功时返回 0,失败时返回负的 errno。
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);
通知控制器控制命令的处理结果。被控端收到 MEDIA_EVENT_* 事件后,完成相应处理,再调用此接口向控制器发送响应。
参数:
handle异步被控端句柄。event要响应的事件类型。result操作结果,成功时为0,失败时为负的 errno。extra附加消息字符串,不需要时传NULL。on_notify通知确认回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。
media_uv_session_update
int media_uv_session_update(void* handle, const media_metadata_t* data, media_uv_callback on_update, void* cookie);
向会话更新元数据。
参数:
handle异步被控端句柄。data要更新的元数据。on_update更新确认回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。