音视频和纯音频通话中,获取通话音量可以实现多种有用的功能,例如:
动态展示通话音量条
识别当前活跃的发言用户
提醒用户是否在发言时忘记开启麦克风
当你希望调整通话音量时,除了通过操作系统进行设置外,也可以通过调用 SDK 接口,分别设置采集、播放或混音音量。
混音音量调节详见使用混音功能。

你可以通过调用 enableAudioPropertiesReport 方法,设置音量回调周期,单位为毫秒,然后在 onLocalAudioPropertiesReport 和 onRemoteAudioPropertiesReport 回调中分别获取用户及对应的音量信息。
音量值对应的音量档位详见 API 文档。
/**
* 启用音频信息提示
*/
- (void)enableAudioPropertiesReport {
ByteRTCAudioPropertiesConfig *audioPropertiesConfig = [[ByteRTCAudioPropertiesConfig alloc] init];
audioPropertiesConfig.interval = 300;
[self.rtcVideo enableAudioPropertiesReport:audioPropertiesConfig];
}
/**
* 回调获取本地麦克风和屏幕音频流采集的音频信息
* @param engine ByteRTCVideo 对象
* @param audioPropertiesInfos 本地音频信息,详见 LocalAudioPropertiesInfo
*/
- (void)rtcEngine:(ByteRTCVideo *)engine onLocalAudioPropertiesReport:(NSArray<ByteRTCLocalAudioPropertiesInfo *> *)audioPropertiesInfos {
// 本地用户音量回调
}
/**
* 回调获取订阅的远端用户的音频信息
* @param engine ByteRTCVideo 对象
* @param audioPropertiesInfos 远端音频信息,其中包含音频流属性、房间 ID、用户 ID ,详见 ByteRTCRemoteAudioPropertiesInfo
* @param totalRemoteVolume 订阅的所有远端流的总音量,范围是 [0,255]
*/
- (void)rtcEngine:(ByteRTCVideo *)engine onRemoteAudioPropertiesReport:(NSArray<ByteRTCRemoteAudioPropertiesInfo *> *)audioPropertiesInfos totalRemoteVolume:(NSInteger)totalRemoteVolume {
// 远端用户音量回调
}
/**
* 回调获取房间内的最活跃用户信息
* @param engine ByteRTCVideo 对象
* @param roomId 房间 ID
* @param uid 最活跃用户(ActiveSpeaker)的用户 ID
*/
- (void)rtcEngine:(ByteRTCVideo *)engine onActiveSpeaker:(NSString *)roomId uid:(NSString *)uid {
// 房间内的最活跃用户信息
}objectivec
/**
* 启用音频信息提示
*/
public void enableAudioPropertiesReport() {
AudioPropertiesConfig config = new AudioPropertiesConfig(300);
mRTCVideo.enableAudioPropertiesReport(config);
}
private final IRTCVideoEventHandler mRTCVideoEventHandle = new IRTCVideoEventHandler() {
/**
* 回调获取本地麦克风和屏幕音频流采集的音频信息
* @param audioPropertiesInfos 本地音频信息,详见 LocalAudioPropertiesInfo
*/
@Override
public void onLocalAudioPropertiesReport(LocalAudioPropertiesInfo[] audioPropertiesInfos) {
// 本地用户音量回调
}
/**
* 回调获取订阅的远端用户的音频信息
* @param audioPropertiesInfos 远端音频信息,其中包含音频流属性、房间 ID、用户 ID ,详见 RemoteAudioPropertiesInfo
* @param totalRemoteVolume 订阅的所有远端流的总音量
*/
@Override
public void onRemoteAudioPropertiesReport(RemoteAudioPropertiesInfo[] audioPropertiesInfos, int totalRemoteVolume) {
// 远端用户音量回调
}
/**
* 回调获取房间内的最活跃用户信息
* @param roomId 房间 ID
* @param uid 最活跃用户(ActiveSpeaker)的用户 ID
*/
@Override
public void onActiveSpeaker(String roomId, String uid) {
// 房间内的最活跃用户信息
}
...java
/**
* 启用音频信息提示
*/
void RtcEngineWrap::enableAudioPropertiesReport() {
bytertc::AudioPropertiesConfig config;
config.interval = 300;
video_engine_->enableAudioPropertiesReport(config);
}
/**
* 回调获取本地麦克风和屏幕音频流采集的音频信息
* @param audio_properties_infos 本地音频信息,详见 [LocalAudioPropertiesInfo](70098.html#localaudiopropertiesinfo)
* @param audio_properties_info_number 数组长度
*/
void RtcEngineWrap::onLocalAudioPropertiesReport(
const LocalAudioPropertiesInfo * audio_properties_infos,
int audio_properties_info_number) {
// 本地用户音量回调
}
/**
* 回调获取订阅的远端用户的音频信息
* @param audio_properties_infos 远端音频信息,其中包含音频流属性、房间 ID、用户 ID ,详见 RemoteAudioPropertiesInfo
* @param audio_properties_info_number 数组长度
* @param total_remote_volume 所有订阅的远端流的总音量,范围是 [0,255]
*/
void RtcEngineWrap::onRemoteAudioPropertiesReport(
const bytertc::RemoteAudioPropertiesInfo* audio_properties_infos,
int audio_properties_info_number, int total_remote_volume) {
// 远端用户音量回调
}
/**
* 回调获取房间内的最活跃用户信息
* @param room_id 房间 ID
* @param uid 最活跃用户(ActiveSpeaker)的用户 ID
*/
void RtcEngineWrap::onActiveSpeaker(
const char* room_id,
const char* uid) {
// 房间内的最活跃用户信息
}cpp采集是指音频输入设备,例如麦克风,采集到声音数据并存储到本地的过程。

你可以通过调用 setCaptureVolume 方法,实现音量参数调整。
该方法中 volume 参数表示录音信号的音量,取值范围为 [0,400]:
0:静音
100:原始音量,不对音频信号幅度进行缩放
400: 最大可为原始音量的 4 倍
[self.rtcVideo setCaptureVolume:ByteRTCStreamIndexMain volume:120];objectivec
mRTCVideo.setCaptureVolume(StreamIndex.STREAM_INDEX_MAIN, 120);java
video_engine_->setCaptureVolume(StreamIndex::kStreamIndexMain, 120);cpp| Android | iOS | Mac | Windows | Linux | |
|---|---|---|---|---|---|
| 采集音量 | setCaptureVolume | setCaptureVolume:volume: | setCaptureVolume:volume: | setCaptureVolume | setCaptureVolume |
播放指客户端接收到远端音视频文件,并通过本地播放设备播放的过程。

所有远端用户音量:你可以通过调用 setPlaybackVolume 方法,实现远端所有用户混音后在本地播放的音量。
指定远端用户音量:你可以通过调用 setRemoteAudioPlaybackVolume 方法,实现指定远端用户在本地播放的音量。
当你需要分别调整多个远端用户在本地播放的音量时,多次调用 setRemoteAudioPlaybackVolume 方法,并传入不同的 uid 和 volume 参数。
当你需要多次调整同一个远端用户在本地播放的音量时,多次调用 setRemoteAudioPlaybackVolume 方法,并传入同一个 uid 和不同的 volume 参数。
int volume = 120;
NSString *uid = @"";
NSString *roomId = @"";
[self.rtcVideo setPlaybackVolume:volume];
[self.rtcVideo setRemoteAudioPlaybackVolume:roomId remoteUid:uid playVolume:volume];objectivec
int volume = 120;
String uid = "";
String roomId = "";
mRTCVideo.setPlaybackVolume(volume);
mRTCVideo.setRemoteAudioPlaybackVolume(roomId, uid, volume);java
int volume = 120;
const char *uid = "";
const char *room_id = "";
video_engine_->setPlaybackVolume(volume);
video_engine_->setRemoteAudioPlaybackVolume(room_id, uid, volume);cppQ: Android 端调用 enableAudioPropertiesReport 成功后,收不到本端的音量回调。
A: RTC SDK 内部采用弱引用持有回调实例,需要自行管理回调实例的生命周期。例如:不能用局部内部类形式创建,必须以成员内部类的形式创建。