You need to enable JavaScript to run this app.
导航

获取音量信息

最近更新时间2023.02.17 17:38:17

首次发布时间2022.01.10 10:32:56

音视频和纯音频通话中,获取通话音量可以实现多种有用的功能,例如:

  • 动态展示通话音量条

  • 识别当前活跃的发言用户

  • 提醒用户是否在发言时忘记开启麦克风

当你希望调整通话音量时,除了通过操作系统进行设置外,也可以通过调用 SDK 接口,分别设置采集、播放或混音音量。

混音音量调节详见使用混音功能

alt

前提条件

  • 实现了实时音视频通信功能。
  • 使用 RTC SDK 内置的音频采集功能。

功能变更日志

  • 自客户端 SDK 3.29 起,获取音量信息功能可用。
  • 自客户端 SDK 3.36 起,本地和远端音量回调支持同时返回线性和非线性音量值。

获取用户音量

实现方法

你可以通过调用 enableAudioPropertiesReport 方法,设置音量回调周期,单位为毫秒,然后在 onLocalAudioPropertiesReportonRemoteAudioPropertiesReport 回调中分别获取用户及对应的音量信息。
音量值对应的音量档位详见 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 {
    // 房间内的最活跃用户信息
}

API参考

AndroidiOSMacWindowsLinuxWeb
启用音量提示enableAudioPropertiesReportenableAudioPropertiesReport:enableAudioPropertiesReport:enableAudioPropertiesReportenableAudioPropertiesReportenableAudioPropertiesReport()
本地音量回调onLocalAudioPropertiesReportrtcEngine:onLocalAudioPropertiesReport:rtcEngine:onLocalAudioPropertiesReport:onLocalAudioPropertiesReportonLocalAudioPropertiesReportonLocalAudioPropertiesReport()
远端用户音量回调onRemoteAudioPropertiesReportrtcEngine:onRemoteAudioPropertiesReport:totalRemoteVolume:rtcEngine:onRemoteAudioPropertiesReport:totalRemoteVolume:onRemoteAudioPropertiesReportonRemoteAudioPropertiesReportonRemoteAudioPropertiesReport()
活跃用户回调onActiveSpeakerrtcEngine:onActiveSpeaker:uid:rtcEngine:onActiveSpeaker:uid:onActiveSpeakeronActiveSpeakeronActiveSpeaker()

调整采集音量

采集是指音频输入设备,例如麦克风,采集到声音数据并存储到本地的过程。

alt

实现方法

你可以通过调用 setCaptureVolume 方法,实现音量参数调整。
该方法中 volume 参数表示录音信号的音量,取值范围为 [0,400]:

  • 0:静音

  • 100:原始音量,不对音频信号幅度进行缩放

  • 400: 最大可为原始音量的 4 倍

示例代码

[self.rtcVideo setCaptureVolume:ByteRTCStreamIndexMain volume:120];

API参考

AndroidiOSMacWindowsLinux
采集音量setCaptureVolumesetCaptureVolume:volume:setCaptureVolume:volume:setCaptureVolumesetCaptureVolume

调整音量播放

播放指客户端接收到远端音视频文件,并通过本地播放设备播放的过程。

alt

实现方法

  • 所有远端用户音量:你可以通过调用 setPlaybackVolume 方法,实现远端所有用户混音后在本地播放的音量。

  • 指定远端用户音量:你可以通过调用 setRemoteAudioPlaybackVolume 方法,实现指定远端用户在本地播放的音量。

    • 当你需要分别调整多个远端用户在本地播放的音量时,多次调用 setRemoteAudioPlaybackVolume 方法,并传入不同的 uidvolume 参数。

    • 当你需要多次调整同一个远端用户在本地播放的音量时,多次调用 setRemoteAudioPlaybackVolume 方法,并传入同一个 uid 和不同的 volume 参数。

示例代码

int volume = 120;
NSString *uid = @"";
NSString *roomId = @"";
[self.rtcVideo setPlaybackVolume:volume];
[self.rtcVideo setRemoteAudioPlaybackVolume:roomId remoteUid:uid playVolume:volume];

API参考

AndroidiOSMacWindowsLinux
所有远端用户音量setPlaybackVolumesetPlaybackVolume:setPlaybackVolume:setPlaybackVolumesetPlaybackVolume
指定远端用户音量setRemoteAudioPlaybackVolumesetRemoteAudioPlaybackVolume:remoteUid:playVolume:setRemoteAudioPlaybackVolume:remoteUid:playVolume:setRemoteAudioPlaybackVolumesetRemoteAudioPlaybackVolume

FAQ

Q: Android 端调用 enableAudioPropertiesReport 成功后,收不到本端的音量回调。

A: RTC SDK 内部采用弱引用持有回调实例,需要自行管理回调实例的生命周期。例如:不能用局部内部类形式创建,必须以成员内部类的形式创建。