音量变化
功能简介
在 K 歌场景中,经常需要拉多路流并显示其中正在讲话的用户,ZEGO 提供了甄别用户是否说话、说话音量大小(音浪)的能力,方便开发者做 UI 展示,例如:

示例源码下载
请参考 下载示例源码 获取源码。
相关源码请查看 “src/Examples/AdvancedAudioProcessing/SoundLevelAndAudioSpectrum” 文件。
前提条件
在监听音量变化功能之前,请确保:
- 已在 ZEGO 控制台 创建项目,并申请有效的 AppID 和 Server 地址,详情请参考 控制台 - 项目信息。
- 已在项目中集成 ZEGO Express SDK,并实现了基本的音视频推拉流功能,详情请参考 快速开始 - 集成 和 快速开始 - 实现流程。
RTC / L3 使用步骤
- 监听音浪回调接口,注册 soundLevelUpdate 回调,接收流音量大小的变化。
说明
音浪即某条流音量的大小。
zg.on('soundLevelUpdate', (streamList) => {
streamList.forEach(stream => {
stream.type == 'push' && $('#soundLevel').html(Math.round(stream.soundLevel) + '');
console.warn(`${stream.type} ${stream.streamID}, soundLevel: ${stream.soundLevel}`);
});
});
-
启动音浪监听,调用 setSoundLevelDelegate 接口启动监听音量大小,设置音浪回调间隔时间,单位为 ms。
zg.setSoundLevelDelegate(true, 1000);
-
停止音浪监听,调用 setSoundLevelDelegate 接口停止监听音量大小。
zg.setSoundLevelDelegate(false);
播放器插件场景使用步骤
- 监听播放器插件音浪回调接口,注册 onSoundLevelUpdate 回调,接收流音量大小的变化。
注意
Safari 浏览器上使用 MSE (Media Source Extensions) 的解码方式播放音频无法获取音浪,如果需要获取音浪避免在 Safari 浏览器上使用 MSE 的解码方式。
// player 为播放器插件 ZegoExpressPlayer 实例
player.onSoundLevelUpdate = (level) => {
// level 为播放器播放音量大小
console.warn("onSoundLevelUpdate",level)
}
- 启动音浪监听,调用 enableSoundLevelMonitor 接口启动监听音量大小,设置音浪回调间隔时间,单位为 ms。
player.enableSoundLevelMonitor(true, 1000);
- 停止音浪监听,调用 enableSoundLevelMonitor 接口停止监听音量大小。
player.enableSoundLevelMonitor(false);
混流场景使用步骤
- 调用 startMixerTask 时,需进行混流配置 ZegoMixStreamConfig,需要将
enableSoundLevel
配置为 true,并为 inputList 配置soundLevelID
,详情请参考 混流。const mixConfig = { "taskID": "custom-task", "enableSoundLevel": true, "inputList": [ { "streamID": streamID1, "soundLevelID": soundLevelID1, "layout": { "top": 0, "left": 0, "bottom": 200, "right": 200 } }, { "streamID": streamID2, "soundLevelID": soundLevelID2, "layout": { "top": 200, "left": 200, "bottom": 400, "right": 400 } } ], "outputList": [ "custom-mixwebrtc-1" ], "outputConfig": { "outputBitrate": 300, "outputFPS": 15, "outputWidth": 400, "outputHeight": 400 } } zg.startMixerTask(mixConfig);
- 调用 mixerSoundLevelUpdate 接口监听混流音量变化。
zg.on("mixerSoundLevelUpdate", (mixMap, id) => { console.warn("mixerSoundLevelUpdate", mixMap, id); });
- 根据混流 streamID 拉流,若需要获取混流音量值,需要开启 SEI,详情请参考 媒体补充增强信息(SEI)。
// 拉流
zg.startPlayingStream(mixStreamID, {
// 开启解析 SEI
isSEIStart: true
}).then(stream => {
}).catch(err => {
});