监测发言者音量
更新时间: 2024/08/05 15:02:55
在语音连麦、视频会议等场景中,开发者应用层常常需要了解到发言者的人声相关信息,从而做出 UI 上的音量展示或根据发言者的音量大小进行视图布局的动态调整。
NERTC SDK 提供监听房间内用户发送的音量值的功能,同时监听本端用户的音频数据中是否存在有效的人声信息。
功能介绍
NERTC SDK 支持根据您设置的时间间隔,定期通过回调返回本端发流用户的瞬时音量值以及是否存在人声,同时返回最多三位瞬时音量最高的远端用户的相关音量信息,即当前正在发言的用户 ID 和用户音频主流及辅流的瞬时音量值。
V5.3.0 及之后版本,子房间支持调用 NERtcChannel#enableAudioVolumeIndication
监测子房间用户的实时音量。
注意事项
- 若本端用户调用
muteLocalAudioStream
方法静音本地音频,SDK 会将音量设置为 0 后通过onLocalAudioVolumeIndication
回调返回静音信息,但此回调默认禁用,只可通过enableAudioVolumeIndication
方法开启。 - 成功启用人声监测功能后,无论房间内是否有人发言,SDK 都会按指定的时间间隔触发
onLocalAudioVolumeIndication
和onRemoteAudioVolumeIndication
回调。 - 返回的
onRemoteAudioVolumeIndication
回调中,若 speakers 数组为空,则表示此时远端没有上行的音频主流或辅流数据;若上次返回的数组中出现的 uid 不在本次返回的数组中,则默认该 uid 对应的远端用户没有发言。
配置步骤
- 调用
enableAudioVolumeIndication
方法,启用发言者的人声监测,并遵循NERtcCallbackEx
协议设置音量及人声回调的对象。- 音量提示的时间间隔值必须设置为 100 毫秒的整数倍,建议设置为 200 毫秒及以上。
- 如果离开房间后再重新进入房间,需要重新调用
enableAudioVolumeIndication
接口,否则会无法收到onRemoteAudioVolumeIndication
回调。
- 成功启用人声监测功能后,SDK 返回以下回调通知:
onLocalAudioVolumeIndication
:房间内本地用户瞬时音量的回调,及提示是否检测到人声。onRemoteAudioVolumeIndication
:房间内正在发言的用户 ID 及用户音频主流和辅流的瞬时音量的回调。
示例代码
NERtcEx.getInstance().enableAudioVolumeIndication(true, 1000, true);
// 启用说话者音量提示,在 onRemoteAudioVolumeIndication 和 onRemoteAudioVolumeIndication 回调中每隔 1000ms 返回音量提示
/**
* 在NERtcCallbackEx中实现以下回调
*/
@Override
public void onLocalAudioVolumeIndication(int volume, boolean vadFlag) {
// 提示房间内本地用户瞬时音量以及是否检测到人声的回调
}
@Override
public void onRemoteAudioVolumeIndication(NERtcAudioVolumeInfo[] volumeArray, int totalVolume) {
// 提示房间内谁正在说话及说话者瞬时音量的回调,包括主流音量 volume 和辅流音量 subStreamVolume
}
API 参考
方法 | 功能描述 |
---|---|
enableAudioVolumeIndication |
启用发言者的人声监测。 |
onLocalAudioVolumeIndication |
房间内本地用户瞬时音量的回调,及提示是否检测到人声。 |
onRemoteAudioVolumeIndication |
房间内正在发言的用户 ID 及用户瞬时音量的回调。 |
常见问题
为什么离开房间前可以收到 onRemoteAudioVolumeIndication
回调,离开后重新加入房间,无法收到 onRemoteAudioVolumeIndication
回调?
enableAudioVolumeIndication
接口的配置在离开房间后会复位,所以用户离开房间后再重新进入房间,需要重新调用 enableAudioVolumeIndication
接口,否则会无法收到onRemoteAudioVolumeIndication
回调。
此文档是否对你有帮助?