[ English | 简体中文 ]
音频策略 API
音频路由、设备管理和模式切换策略。
头文件:#include <media_policy.h>
openvela 实现说明
- Parameter Framework(PFW)后端:策略数据通过 openvela PFW 规则引擎管理,运行时可动态切换
- 同步/异步双模型:
media_policy_*(同步)和media_uv_policy_*(异步,基于 libuv) - 策略类别:涵盖 5 类运行时控制
- 音频模式(Audio Mode):通话、媒体播放、免提等场景切换
- 设备路由(Device Routing):启用/禁用、可用性、使用状态
- 音量控制(Stream Volume):按音频流类型调整音量
- 静音(Mute):全局静音与麦克风静音
- 通用参数(int/string/include/exclude/contain):扩展配置读写
- 订阅机制:通过
media_policy_subscribe监听策略变化事件(同步接口独有) - HFP 采样率:通过
set_hfp_samplerate调整蓝牙免提音频采样率
同步接口 - 音频模式
media_policy_set_audio_mode
int media_policy_set_audio_mode(const char* mode);
设置音频模式(如通话模式、正常模式)。
参数:
mode模式常量
返回值:
成功时返回 0,失败时返回负的错误码。
media_policy_get_audio_mode
int media_policy_get_audio_mode(char* mode, int len);
获取当前音频模式。
参数:
mode输出缓冲区。len缓冲区长度。
同步接口 - 设备使用
media_policy_set_devices_use
int media_policy_set_devices_use(const char* devices);
强制使用指定音频设备或协议。
参数:
devices设备常量,支持多设备,用 "|" 分隔。
返回值:
成功时返回 0,失败时返回负的 errno。
media_policy_set_devices_unuse
int media_policy_set_devices_unuse(const char* devices);
取消强制使用音频设备。
参数:
devices设备常量,支持多设备,用 "|" 分隔。
返回值:
成功时返回 0,失败时返回负的 errno。
media_policy_get_devices_use
int media_policy_get_devices_use(char* devices, int len);
获取当前强制使用的音频设备。
参数:
devices设备名称字符串,多个设备用|分隔(例如"sco"、"sco|mic"、"<none>")。len缓冲区长度。
返回值:
成功时返回 0,失败时返回负的 errno。
media_policy_is_devices_use
int media_policy_is_devices_use(const char* devices, int* use);
检查指定设备是否处于强制使用状态。
参数:
devices设备常量,支持多设备,用 "|" 分隔。use设备使用状态:0 表示所有设备均未使用,1 表示至少有一个设备正在使用。
同步接口 - HFP 采样率与设备可用性
media_policy_set_hfp_samplerate
int media_policy_set_hfp_samplerate(int rate);
设置 HFP 蓝牙通话采样率。HFP(Hands-Free Profile)基于 BT-SCO 传输,采样率在协商完成前不确定。
参数:
rate采样率,CVSD 编码取 8000,mSBC 编码取 16000。
返回值:
成功时返回 0,失败时返回负的错误码。
media_policy_set_devices_available
int media_policy_set_devices_available(const char* devices);
报告音频设备(或协议)可用。
参数:
devices设备常量,支持多设备,用 "|" 分隔。
返回值:
成功时返回 0,失败时返回负的错误码。
media_policy_set_devices_unavailable
int media_policy_set_devices_unavailable(const char* devices);
报告音频设备(或协议)不可用。
参数:
devices设备常量,支持多设备,用 "|" 分隔。
返回值:
成功时返回 0,失败时返回负的错误码。
media_policy_get_devices_available
int media_policy_get_devices_available(char* devices, int len);
获取当前可用设备。
参数:
devices设备名称字符串,多个设备用|分隔(例如"sco"、"sco|mic"、"<none>")。len缓冲区长度。
返回值:
成功时返回 0,失败时返回负的 errno。
media_policy_is_devices_available
int media_policy_is_devices_available(const char* devices, int* available);
检查指定设备是否可用。
参数:
devices待检查的设备,取值为MEDIA_DEVICE_*常量,多个设备用|分隔。available设备可用性状态:0 表示所有设备均不可用,1 表示至少有一个设备可用。
同步接口 - 静音控制
media_policy_set_mute_mode
int media_policy_set_mute_mode(int mute);
设置静音模式。
参数:
mute新的静音模式:0 表示关闭静音,1 表示开启静音。
返回值:
成功时返回 0,失败时返回负的 errno。
media_policy_get_mute_mode
int media_policy_get_mute_mode(int* mute);
获取当前静音模式。
参数:
mute当前静音模式:0 表示关闭静音,1 表示开启静音。
同步接口 - 音量控制
media_policy_set_stream_volume
int media_policy_set_stream_volume(const char* stream, int volume);
设置指定流类型的音量档位。
参数:
stream流类型常量(MEDIA_STREAM_*)。volume新的音量档位。
返回值:
成功时返回 0,失败时返回负的 errno。
media_policy_get_stream_volume
int media_policy_get_stream_volume(const char* stream, int* volume);
获取指定流类型的音量档位。
参数:
stream流类型常量(MEDIA_STREAM_*)。volume当前音量档位。
返回值:
成功时返回 0,失败时返回负的 errno。
media_policy_increase_stream_volume
int media_policy_increase_stream_volume(const char* stream);
将指定流类型的音量档位加 1。
参数:
stream流类型常量(MEDIA_STREAM_*)。
返回值:
成功时返回 0,失败时返回负的 errno。
media_policy_decrease_stream_volume
int media_policy_decrease_stream_volume(const char* stream);
将指定流类型的音量档位减 1。
参数:
stream流类型常量(MEDIA_STREAM_*)。
同步接口 - 麦克风静音
media_policy_set_mic_mute
int media_policy_set_mic_mute(int mute);
静音麦克风。
参数:
mute麦克风静音模式:1 表示关闭静音,0 表示开启静音。
同步接口 - 通用参数读写
media_policy_set_int
int media_policy_set_int(const char* name, int value, int apply);
设置策略条件的数值。
参数:
name准则名称。value数值。apply是否将变更应用到策略。
返回值:
成功时返回 0,失败时返回负的错误码。
media_policy_get_int
int media_policy_get_int(const char* name, int* value);
获取策略条件的数值。
参数:
name准则名称。value数值。
返回值:
成功时返回 0,失败时返回负的错误码。
media_policy_get_range
int media_policy_get_range(const char* name, int* min_value, int* max_value);
获取策略条件的数值范围。
参数:
name准则名称。min_value数值最小值。min_value数值最大值。
返回值:
成功时返回 0,失败时返回负的错误码。
media_policy_set_string
int media_policy_set_string(const char* name, const char* value, int apply);
设置策略条件的字符串值。
参数:
name准则名称。value字符串值。apply是否将变更应用到策略。
返回值:
成功时返回 0,失败时返回负的错误码。
media_policy_get_string
int media_policy_get_string(const char* name, char* value, int len);
获取策略条件的字符串值。
参数:
name准则名称。value输出缓冲区。len缓冲区长度。
返回值:
成功时返回 0,失败时返回负的错误码。
media_policy_include
int media_policy_include(const char* name, const char* values, int apply);
向包含型条件添加字面值。
参数:
name准则名称。values字符串值。apply是否将变更应用到策略。
返回值:
成功时返回 0,失败时返回负的错误码。
media_policy_exclude
int media_policy_exclude(const char* name, const char* values, int apply);
从包含型条件移除字面值。
参数:
name准则名称。values字符串值。apply是否将变更应用到策略。
返回值:
成功时返回 0,失败时返回负的错误码。
media_policy_contain
int media_policy_contain(const char* name, const char* values, int* result);
检查字面值是否包含在包含型条件中。
参数:
name准则名称。values字符串值数组。result值是否被包含。
返回值:
成功时返回 0,失败时返回负的错误码。
media_policy_increase
int media_policy_increase(const char* name, int apply);
将数值型条件值加 1。
参数:
name准则名称。apply是否将变更应用到策略。
返回值:
成功时返回 0,失败时返回负的错误码。
media_policy_decrease
int media_policy_decrease(const char* name, int apply);
将数值型条件值减 1。
参数:
name准则名称。apply是否将变更应用到策略。
返回值:
成功时返回 0,失败时返回负的错误码。
同步接口 - 订阅事件
media_policy_subscribe
void* media_policy_subscribe(const char* name, media_policy_change_callback on_change, void* cookie);
订阅策略条件变化事件。
参数:
name准则名称。on_change准则值变化时触发的回调。
返回值:
成功时返回有效句柄,失败时返回 NULL。
media_policy_unsubscribe
int media_policy_unsubscribe(void* handle);
取消订阅策略条件变化事件。
参数:
name准则名称。handle用于取消订阅的句柄。
异步接口(基于 libuv)
以下接口仅在启用 CONFIG_LIBUV 时可用。
media_uv_policy_set_int
int media_uv_policy_set_int(void* loop, const char* name, int value, int apply, media_uv_callback cb, void* cookie);
设置策略条件的数值。
参数:
loop当前线程的uv_loop_t*事件循环句柄。name准则名称。value要设置的数值。apply是否将新值应用到策略配置。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的错误码。
media_uv_policy_get_int
int media_uv_policy_get_int(void* loop, const char* name, media_uv_int_callback cb, void* cookie);
获取策略条件的数值。
参数:
loop当前线程的uv_loop_t*事件循环句柄。name准则名称。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的错误码。
media_uv_policy_increase
int media_uv_policy_increase(void* loop, const char* name, int apply, media_uv_callback cb, void* cookie);
将策略条件的数值加 1。
参数:
loop当前线程的uv_loop_t*事件循环句柄。name准则名称。apply是否将新值应用到策略配置。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的错误码。
media_uv_policy_set_string
int media_uv_policy_set_string(void* loop, const char* name, const char* value, int apply, media_uv_callback cb, void* cookie);
设置策略条件的字符串值。
参数:
loop当前线程的uv_loop_t*事件循环句柄。name准则名称。value要设置的字符串值。apply是否将新值应用到策略配置。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的错误码。
media_uv_policy_get_string
int media_uv_policy_get_string(void* loop, const char* name, media_uv_string_callback cb, void* cookie);
获取策略条件的字符串值。
参数:
loop当前线程的uv_loop_t*事件循环句柄。name准则名称。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的错误码。
media_uv_policy_decrease
int media_uv_policy_decrease(void* loop, const char* name, int apply, media_uv_callback cb, void* cookie);
将策略条件的数值减 1。
参数:
loop当前线程的uv_loop_t*事件循环句柄。name准则名称。apply是否将新值应用到策略配置。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的错误码。
media_uv_policy_include
int media_uv_policy_include(void* loop, const char* name, const char* value, int apply, media_uv_callback cb, void* cookie);
向包含型条件添加字面值。
参数:
loop当前线程的uv_loop_t*事件循环句柄。name准则名称。value字符串值数组。apply是否将新值应用到策略配置。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的错误码。
media_uv_policy_exclude
int media_uv_policy_exclude(void* loop, const char* name, const char* value, int apply, media_uv_callback cb, void* cookie);
从包含型条件移除字面值。
参数:
loop当前线程的uv_loop_t*事件循环句柄。name准则名称。value字符串值数组。apply是否将新值应用到策略配置。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的错误码。
media_uv_policy_contain
int media_uv_policy_contain(void* loop, const char* name, const char* value, media_uv_int_callback cb, void* cookie);
检查字面值是否包含在包含型条件中。
参数:
loop当前线程的uv_loop_t*事件循环句柄。name准则名称。value字符串值数组。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的错误码。
media_uv_policy_set_stream_volume
int media_uv_policy_set_stream_volume(void* loop, const char* stream, int volume, media_uv_callback cb, void* cookie);
设置指定流类型的音量。
参数:
loop当前线程的uv_loop_t*事件循环句柄。stream流类型,取值为流类型常量。volume要设置的音量档位。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。
media_uv_policy_get_stream_volume
int media_uv_policy_get_stream_volume(void* loop, const char* stream, media_uv_int_callback cb, void* cookie);
获取指定流类型的音量。
参数:
loop当前线程的uv_loop_t*事件循环句柄。stream流类型,取值为流类型常量。volume要设置的音量档位。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。
media_uv_policy_increase_stream_volume
int media_uv_policy_increase_stream_volume(void* loop, const char* stream, media_uv_callback cb, void* cookie);
将指定流类型的音量加 1。
参数:
loop当前线程的uv_loop_t*事件循环句柄。stream流类型,取值为流类型常量。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。
media_uv_policy_decrease_stream_volume
int media_uv_policy_decrease_stream_volume(void* loop, const char* stream, media_uv_callback cb, void* cookie);
将指定流类型的音量减 1。
参数:
loop当前线程的uv_loop_t*事件循环句柄。stream流类型,取值为流类型常量。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。
media_uv_policy_set_audio_mode
int media_uv_policy_set_audio_mode(void* loop, const char* mode, media_uv_callback cb, void* cookie);
设置音频模式(如通话模式、正常模式)。
参数:
loop当前线程的uv_loop_t*事件循环句柄。mode新的音频模式。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。
media_uv_policy_get_audio_mode
int media_uv_policy_get_audio_mode(void* loop, media_uv_string_callback cb, void* cookie);
获取当前音频模式。
参数:
loop当前线程的uv_loop_t*事件循环句柄。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。
media_uv_policy_set_devices_use
int media_uv_policy_set_devices_use(void* loop, const char* devices, bool use, media_uv_callback cb, void* cookie);
强制使用或取消使用指定设备(或协议)。
参数:
loop当前线程的uv_loop_t*事件循环句柄。devices目标设备。use将设备设置为使用或未使用状态。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。
media_uv_policy_get_devices_use
int media_uv_policy_get_devices_use(void* loop, media_uv_string_callback cb, void* cookie);
获取当前强制使用的设备。
参数:
loop当前线程的uv_loop_t*事件循环句柄。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。
media_uv_policy_is_devices_use
int media_uv_policy_is_devices_use(void* loop, const char* devices, media_uv_int_callback cb, void* cookie);
检查指定设备是否正在被使用。
参数:
loop当前线程的uv_loop_t*事件循环句柄。devices待检查的设备。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。
media_uv_policy_set_hfp_samplerate
int media_uv_policy_set_hfp_samplerate(void* loop, int rate, media_uv_callback cb, void* cookie);
设置 HFP(Hands-Free Profile)采样率。
参数:
loop当前线程的uv_loop_t*事件循环句柄。rate采样率,CVSD 编码取 8000,mSBC 编码取 16000。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的错误码。
注意:
- 此接口已废弃,
rate参数将来会改为int类型。
media_uv_policy_set_devices_available
int media_uv_policy_set_devices_available(void* loop, const char* devices, bool available, media_uv_callback cb, void* cookie);
设置设备可用或不可用状态。
参数:
loop当前线程的uv_loop_t*事件循环句柄。devices目标设备。available将设备设置为可用或不可用状态。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的错误码。
media_uv_policy_get_devices_available
int media_uv_policy_get_devices_available(void* loop, media_uv_string_callback cb, void* cookie);
获取当前可用设备。
参数:
loop当前线程的uv_loop_t*事件循环句柄。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。
media_uv_policy_is_devices_available
int media_uv_policy_is_devices_available(void* loop, const char* devices, media_uv_int_callback cb, void* cookie);
检查指定设备是否可用。
参数:
loop当前线程的uv_loop_t*事件循环句柄。devices待检查的设备。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。
media_uv_policy_set_mute_mode
int media_uv_policy_set_mute_mode(void* loop, int mute, media_uv_callback cb, void* cookie);
设置静音模式。
参数:
loop当前线程的uv_loop_t*事件循环句柄。mute新的静音模式。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。
media_uv_policy_get_mute_mode
int media_uv_policy_get_mute_mode(void* loop, media_uv_int_callback cb, void* cookie);
获取当前静音模式。
参数:
loop当前线程的uv_loop_t*事件循环句柄。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。
media_uv_policy_set_mic_mute
int media_uv_policy_set_mic_mute(void* loop, int mute, media_uv_callback cb, void* cookie);
静音内置麦克风或蓝牙麦克风。
参数:
loop当前线程的uv_loop_t*事件循环句柄。mute静音模式。cb结果回调函数。cookie回调上下文参数。
返回值:
成功时返回 0,失败时返回负的 errno。