音频基础功能
- C++
更新时间不可用
adjustPlaybackSignalVolume
调节所有远端用户的本地播放音量。
virtual int adjustPlaybackSignalVolume(int volume) = 0;如果你需要调节某个指定远端用户的本地播放音量,建议调用 adjustUserPlaybackSignalVolume 方法。
调用时机
该方法可以在加入频道前或加入频道后调用。
参数
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
所属接口类
adjustUserPlaybackSignalVolume
调整指定远端用户的播放信号音量。
virtual int adjustUserPlaybackSignalVolume(uid_t uid, int volume) = 0;你可以调用该方法调整指定远端用户的播放音量。若需调整多个远端用户的播放音量,请分别多次调用该方法,每次针对一个远端用户。
调用时机
请在加入频道后调用该方法。
参数
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
所属接口类
adjustUserPlaybackSignalVolumeEx
调整指定远端用户的播放信号音量。
virtual int adjustUserPlaybackSignalVolumeEx(uid_t uid, int volume, const RtcConnection& connection) = 0;你可以调用该方法调整指定远端用户的播放音量。若需调整多个远端用户的播放音量,请分别多次调用该方法,每次针对一个远端用户。
适用场景
该方法适用于多频道场景。
调用时机
请在调用 joinChannelEx 后调用该方法。
参数
| 参数名 | 描述 |
|---|---|
uid | |
volume | |
connection | 连接信息。详见 RtcConnection。 |
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
所属接口类
disableAudio
禁用音频模块。
virtual int disableAudio() = 0;注: 该方法会重置内部引擎,并需要一定时间生效。声网建议使用以下 API 分别控制音频模块:
- enableLocalAudio:是否启用麦克风以创建本地音频流。
- enableLoopbackRecording:是否启用回环音频采集。
- muteLocalAudioStream:是否发布本地音频流。
- muteRemoteAudioStream:是否订阅并播放远端音频流。
- muteAllRemoteAudioStreams:是否订阅并播放所有远端音频流。
调用时机
该方法可以在加入频道前或加入频道后调用。离开频道后仍然有效。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
所属接口类
enableAudio
启用音频模块。
virtual int enableAudio() = 0;音频模块默认处于启用状态。调用 disableAudio 方法禁用音频模块后,可以调用该方法重新启用音频模块。
注: 调用该方法会重置整个引擎,可能导致响应时间变慢。你可以根据实际需求,使用以下方法分别控制音频模块的具体功能:
- enableLocalAudio:是否启用麦克风以创建本地音频流。
- muteLocalAudioStream:是否发布本地音频流。
- muteRemoteAudioStream:是否订阅并播放远端音频流。
- muteAllRemoteAudioStreams:是否订阅并播放所有远端音频流。
成功调用该方法会重置 enableLocalAudio、muteRemoteAudioStream 和 muteAllRemoteAudioStreams 的设置,请谨慎使用。
调用时机
该方法可以在加入频道前或加入频道后调用,离开频道后仍然有效。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
所属接口类
enableAudioVolumeIndication
启用用户音量提示的上报功能。
virtual int enableAudioVolumeIndication(int interval, int smooth, bool reportVad) = 0;该方法用于启用 SDK 定期向应用上报本地发送音频流的用户和瞬时音量最大的最多三位远端用户的音量信息。
调用时机
该方法可以在加入频道前或加入频道后调用。
相关回调
成功调用该方法后,若频道中有用户发布音频流,SDK 会按照设置的时间间隔触发 onAudioVolumeIndication 回调。
参数
| 参数名 | 描述 |
|---|---|
interval | 设置两次音量提示之间的时间间隔(毫秒):
|
smooth | |
reportVad | 是否启用本地用户的语音活动检测(VAD):
|
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
所属接口类
enableAudioVolumeIndicationEx
启用用户音量提示的上报功能。
virtual int enableAudioVolumeIndicationEx(int interval, int smooth, bool reportVad, const RtcConnection& connection) = 0;该方法用于启用 SDK 定期向应用上报本地发送音频流的用户和音量瞬时值最高的最多三位远端用户的音量信息。
适用场景
该方法适用于多频道场景。
调用时机
请在调用 joinChannelEx 后调用该方法。
相关回调
成功调用该方法后,SDK 会根据设置的时间间隔触发 onAudioVolumeIndication 回调,在频道中有用户发布音频流时报告音量信息。
参数
| 参数名 | 描述 |
|---|---|
interval | 设置两次音量提示之间的时间间隔(毫秒):
|
smooth | |
reportVad | 是否启用本地用户的语音活动检测(Voice Activity Detection):
|
connection | 连接信息。详见 RtcConnection。 |
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
所属接口类
setAudioProfile [1/2]
设置音频配置和音频场景。
virtual int setAudioProfile(AUDIO_PROFILE_TYPE profile, AUDIO_SCENARIO_TYPE scenario) __deprecated = 0;废弃
该方法已废弃。你可以改用 setAudioProfile [2/2] 方法。若需设置音频场景,请调用 initialize 方法,并在 RtcEngineContext 结构体中的 audioScenario 成员中传入值。
注: 由于 iOS 系统限制,在通话音量模式下部分音频路由无法识别。因此,如需使用外置声卡,建议将音频场景设置为 AUDIO_SCENARIO_GAME_STREAMING(3)。在该场景下,SDK 会切换为媒体音量以规避该问题。
适用场景
该方法适用于多种音频场景,你可以根据实际需求进行选择。例如,在对音质要求较高的场景(如音乐教学)中,建议将 profile 设置为 AUDIO_PROFILE_MUSIC_HIGH_QUALITY(4),将 scenario 设置为 AUDIO_SCENARIO_GAME_STREAMING(3)。你可以在加入频道前或加入频道后调用该方法。
参数
| 参数名 | 描述 |
|---|---|
profile | 音频配置,包括采样率、码率、编码模式和声道数。详见 AUDIO_PROFILE_TYPE。 |
scenario | 音频场景,在不同的音频场景下设备使用不同的音量类型。详见 AUDIO_SCENARIO_TYPE。 |
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
所属接口类
setAudioProfile [2/2]
设置音频配置文件。
virtual int setAudioProfile(AUDIO_PROFILE_TYPE profile) = 0;适用场景
你可以根据实际需求选择合适的音频配置文件。例如,在音乐教学等对音质要求较高的场景中,建议将 profile 设置为 AUDIO_PROFILE_MUSIC_HIGH_QUALITY(4)。如果你需要设置音频场景,可以调用 setAudioScenario,或者调用 initialize 并在 RtcEngineContext 中设置 audioScenario。
调用时机
你可以在加入频道前或后调用该方法。
参数
| 参数名 | 描述 |
|---|---|
profile | 音频配置文件,包括采样率、码率、编码模式和声道数。详见 AUDIO_PROFILE_TYPE。 |
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
所属接口类
setAudioScenario
设置音频场景。
virtual int setAudioScenario(AUDIO_SCENARIO_TYPE scenario) = 0;注: 由于 iOS 系统限制,在通话音量模式下,部分音频路由可能无法识别。如果你需要使用外置声卡,建议将音频场景设置为 AUDIO_SCENARIO_GAME_STREAMING(3)。在该场景下,SDK 会切换为媒体音量,以避免该问题。
适用场景
该方法适用于多种音频场景。例如,在对音质要求较高的音乐教学场景中,建议将 scenario 设置为 AUDIO_SCENARIO_GAME_STREAMING(3)。
调用时机
你可以在加入频道前或加入频道后调用该方法。
参数
| 参数名 | 描述 |
|---|---|
scenario | 音频场景。不同音频场景下,设备使用不同的音量类型。详见 AUDIO_SCENARIO_TYPE。 |
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
所属接口类
setAudioSessionOperationRestriction
设置 SDK 对音频会话的操作权限。
virtual int setAudioSessionOperationRestriction(AUDIO_SESSION_OPERATION_RESTRICTION restriction) = 0;默认情况下,SDK 和 App 都可以配置音频会话。如果你只希望由 App 配置音频会话,可以通过该方法限制 SDK 的操作权限。你可以在加入频道前或后调用该方法。一旦调用该方法进行限制,当 SDK 需要更改音频会话时,该限制将生效。
注:
- 该方法仅适用于 iOS。
- 该方法不会限制 App 对音频会话的操作权限。
参数
| 参数名 | 描述 |
|---|---|
restriction | SDK 对音频会话的操作权限。该参数为位掩码格式,每一位对应一个权限。详见 AUDIO_SESSION_OPERATION_RESTRICTION。 |
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
所属接口类
onActiveSpeaker
最活跃远端说话人回调。
virtual void onActiveSpeaker(uid_t uid)调用 enableAudioVolumeIndication 方法成功后,SDK 会持续检测哪位远端用户的音量最大。在当前周期内,音量被检测为最大次数最多的远端用户即为最活跃用户。当频道中用户数不少于两人且存在活跃的远端说话人时,SDK 会触发该回调并报告最活跃远端说话人的用户 ID。
- 如果最活跃的远端说话人始终是同一用户,SDK 只会触发一次该回调。
- 如果最活跃的远端说话人变更为其他用户,SDK 会再次触发该回调并报告新的最活跃远端说话人的用户 ID。
参数
所属接口类
onAudioQuality
报告每个远端用户发送的音频流的统计信息。
virtual void onAudioQuality(uid_t uid, int quality, unsigned short delay, unsigned short lost) __deprecated废弃
该回调已废弃,请改用 onRemoteAudioStats。
SDK 每两秒触发一次该回调,用于报告每个正在发送音频流的远端用户的音频质量。如果频道中有多个用户发送音频流,SDK 会触发多次该回调。
参数
| 参数名 | 描述 |
|---|---|
uid | |
quality | 该用户的音频质量,详见 QUALITY_TYPE。 |
delay | |
lost |
所属接口类
onAudioVolumeIndication
virtual void onAudioVolumeIndication(const AudioVolumeInfo* speakers, unsigned int speakerNumber, int totalVolume)默认情况下,该回调处于关闭状态。你可以通过调用 enableAudioVolumeIndication 方法开启该回调。开启后,当频道中有用户发送音频流时,SDK 会按照 enableAudioVolumeIndication 中设置的时间间隔触发该回调。SDK 会同时触发两个独立的 onAudioVolumeIndication 回调,分别报告发送音频流的本地用户和瞬时音量最高的最多三位远端用户的音量信息。
注: 开启该回调后,即使本地用户调用 muteLocalAudioStream 方法将音频静音,SDK 仍会继续报告本地用户的音量信息。如果某位远端用户的音量为频道中前三高之一,但停止发布音频流超过 20 秒,该回调将不再包含该用户的信息;如果所有远端用户都停止发布音频流超过 20 秒,SDK 将不再触发远端用户的音量回调。
触发时机
当启用音量提示并有用户发送音频流时触发。
参数
| 参数名 | 描述 |
|---|---|
speakers | 用户的音量信息。详见 AudioVolumeInfo。当该回调中的 |
speakerNumber | |
totalVolume |
所属接口类
onFirstLocalAudioFramePublished
本地用户发布首帧音频时触发的回调。
virtual void onFirstLocalAudioFramePublished(int elapsed)触发时机
该回调在以下任一情况下由 SDK 触发:
- 本地客户端启用音频模块并成功调用
joinChannel。 - 本地客户端依次调用
muteLocalAudioStream(true)和muteLocalAudioStream(false)。 - 本地客户端依次调用 disableAudio 和 enableAudio。
- 本地客户端调用 pushAudioFrame 成功将音频帧推送至 SDK。
参数
所属接口类
onFirstRemoteAudioDecoded
首帧远端音频解码完成回调。
virtual void onFirstRemoteAudioDecoded(uid_t uid, int elapsed) __deprecated废弃
该方法已废弃,请改用 onRemoteAudioStateChanged。
触发时机
当远端用户首次发送音频流,或音频从离线恢复为在线重新发送音频时触发。
参数
所属接口类
onFirstRemoteAudioFrame
远端用户音频首帧到达回调。
virtual void onFirstRemoteAudioFrame(uid_t uid, int elapsed) __deprecated废弃
该方法已废弃,请改用 onRemoteAudioStateChanged。
参数
所属接口类
onLocalAudioStateChanged
本地音频流状态发生变化回调。
virtual void onLocalAudioStateChanged(LOCAL_AUDIO_STREAM_STATE state, LOCAL_AUDIO_STREAM_REASON reason)当本地音频流的状态(包括音频采集和编码状态)发生变化时,SDK 会触发该回调报告当前状态,帮助你排查音频异常问题。
注: 当状态为 LOCAL_AUDIO_STREAM_STATE_FAILED(3)时,可以在 reason 参数中查看错误信息。
参数
| 参数名 | 描述 |
|---|---|
state | 本地音频流的状态,详见 LOCAL_AUDIO_STREAM_STATE。 |
reason | 本地音频流状态变化的原因,详见 LOCAL_AUDIO_STREAM_REASON。 |
所属接口类
onLocalAudioStats
本地音频统计信息回调。
virtual void onLocalAudioStats(const LocalAudioStats& stats)触发时机
SDK 每两秒触发一次该回调。
参数
| 参数名 | 描述 |
|---|---|
stats | 本地音频统计信息。详见 LocalAudioStats。 |
所属接口类
onRemoteAudioStateChanged
远端音频状态发生变化回调。
virtual void onRemoteAudioStateChanged(uid_t uid, REMOTE_AUDIO_STATE state, REMOTE_AUDIO_STATE_REASON reason, int elapsed)注: 当通信场景下的用户或直播场景下的主播数量超过 32 时,该回调无法正常工作。
触发时机
当远端用户的音频状态发生变化时触发。
参数
| 参数名 | 描述 |
|---|---|
uid | |
state | 远端音频状态。详见 REMOTE_AUDIO_STATE。 |
reason | 远端音频状态变化的原因。详见 REMOTE_AUDIO_STATE_REASON。 |
elapsed |
所属接口类
onRemoteAudioStats
远端音频流统计信息回调。
virtual void onRemoteAudioStats(const RemoteAudioStats& stats)该回调每两秒触发一次,用于报告每个正在发送音频流的远端用户的传输层统计信息。如果频道中有多个远端用户,SDK 会分别为每个用户触发该回调。
参数
| 参数名 | 描述 |
|---|---|
stats | 远端音频流的统计信息。详见 RemoteAudioStats。 |
所属接口类
onRemoteAudioTransportStats
报告每个远端音频流的传输层统计信息回调。
virtual void onRemoteAudioTransportStats(uid_t uid, unsigned short delay, unsigned short lost, unsigned short rxKBitRate) __deprecated废弃
该方法已废弃,请改用 onRemoteAudioStats。
该回调报告传输层的统计信息,例如在本地用户接收到远端用户的音频数据包后,数据包的丢失率和网络时延。该回调在通话过程中每 2 秒触发一次。
触发时机
在通话过程中,每当本地用户接收到远端用户发送的音频数据包时,每 2 秒触发一次。
参数
所属接口类
onUserMuteAudio
远端用户或主播停止或恢复发送音频流回调。
virtual void onUserMuteAudio(uid_t uid, bool muted)当远端用户调用 muteLocalAudioStream 停止或恢复发送音频流时,SDK 会触发该回调。
注: 当通信场景中的用户数量或直播场景中的主播数量超过 32 时,该回调可能无法正常工作。