音频基础功能
adjustPlaybackSignalVolume
调节所有远端用户的本地播放音量。
virtual int adjustPlaybackSignalVolume(int volume) = 0;
如果你需要调节某个指定远端用户的本地播放音量,建议调用 adjustUserPlaybackSignalVolume 方法。
调用时机
该方法可以在加入频道前或加入频道后调用。
参数
- volume
- 用户的音量,取值范围为 [0,400]。
- 0:静音。
- 100:(默认)原始音量。
- 400:原始音量的四倍(将音频信号放大四倍)。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
adjustUserPlaybackSignalVolume
调整指定远端用户的播放信号音量。
virtual int adjustUserPlaybackSignalVolume(uid_t uid, int volume) = 0;
你可以调用该方法调整指定远端用户的播放音量。若需调整多个远端用户的播放音量,请分别多次调用该方法,每次针对一个远端用户。
调用时机
请在加入频道后调用该方法。
参数
- uid
- 远端用户的用户 ID。
- volume
- 用户的音量,取值范围为 [0, 400]。
- 0:静音。
- 100:(默认)原始音量。
- 400:原始音量的四倍(将音频信号放大四倍)。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
adjustUserPlaybackSignalVolumeEx
调整指定远端用户的播放信号音量。
virtual int adjustUserPlaybackSignalVolumeEx(uid_t uid, int volume, const RtcConnection& connection) = 0;
你可以调用该方法调整指定远端用户的播放音量。若需调整多个远端用户的播放音量,请分别多次调用该方法,每次针对一个远端用户。
适用场景
该方法适用于多频道场景。
调用时机
请在调用 joinChannelEx 后调用该方法。
参数
- uid
- 远端用户的用户 ID。
- volume
- 用户的音量,取值范围为 [0, 400]:
- 0:静音。
- 100:(默认)原始音量。
- 400:原始音量的四倍(将音频信号放大四倍)。
- connection
- 连接信息。详见 RtcConnection。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
disableAudio
禁用音频模块。
virtual int disableAudio() = 0;
- enableLocalAudio:是否启用麦克风以创建本地音频流。
- enableLoopbackRecording:是否启用回环音频采集。
- muteLocalAudioStream:是否发布本地音频流。
- muteRemoteAudioStream:是否订阅并播放远端音频流。
- muteAllRemoteAudioStreams:是否订阅并播放所有远端音频流。
调用时机
该方法可以在加入频道前或加入频道后调用。离开频道后仍然有效。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
enableAudio
启用音频模块。
virtual int enableAudio() = 0;
音频模块默认处于启用状态。调用 disableAudio 方法禁用音频模块后,可以调用该方法重新启用音频模块。
- enableLocalAudio:是否启用麦克风以创建本地音频流。
- muteLocalAudioStream:是否发布本地音频流。
- muteRemoteAudioStream:是否订阅并播放远端音频流。
- muteAllRemoteAudioStreams:是否订阅并播放所有远端音频流。
调用时机
该方法可以在加入频道前或加入频道后调用,离开频道后仍然有效。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
enableAudioVolumeIndication
启用用户音量提示的上报功能。
virtual int enableAudioVolumeIndication(int interval, int smooth, bool reportVad) = 0;
该方法用于启用 SDK 定期向应用上报本地发送音频流的用户和瞬时音量最大的最多三位远端用户的音量信息。
调用时机
该方法可以在加入频道前或加入频道后调用。
相关回调
成功调用该方法后,若频道中有用户发布音频流,SDK 会按照设置的时间间隔触发 onAudioVolumeIndication 回调。
参数
- interval
- 设置两次音量提示之间的时间间隔(毫秒):
- ≤ 0:关闭音量提示功能。
- > 0:两次音量提示之间的时间间隔(单位为毫秒)。该值需大于 10,否则无法收到 onAudioVolumeIndication 回调。建议设置为大于 100。
- smooth
- 设置音量提示的灵敏度平滑系数,取值范围为 0 到 10,推荐值为 3。值越大,提示越灵敏。
- reportVad
- 是否启用本地用户的语音活动检测(VAD):
- true:启用语音活动检测。启用后,onAudioVolumeIndication 回调中的
vad参数会报告本地用户的语音活动状态。 - false:(默认)关闭语音活动检测。关闭后,onAudioVolumeIndication 回调中的
vad参数不会报告本地用户的语音活动状态,除非引擎自动检测到语音活动。
- true:启用语音活动检测。启用后,onAudioVolumeIndication 回调中的
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
enableAudioVolumeIndicationEx
启用用户音量提示的上报功能。
virtual int enableAudioVolumeIndicationEx(int interval, int smooth, bool reportVad, const RtcConnection& connection) = 0;
该方法用于启用 SDK 定期向应用上报本地发送音频流的用户和音量瞬时值最高的最多三位远端用户的音量信息。
适用场景
该方法适用于多频道场景。
调用时机
请在调用 joinChannelEx 后调用该方法。
相关回调
成功调用该方法后,SDK 会根据设置的时间间隔触发 onAudioVolumeIndication 回调,在频道中有用户发布音频流时报告音量信息。
参数
- interval
- 设置两次音量提示之间的时间间隔(毫秒):
- ≤ 0:关闭音量提示。
- > 0:两次音量提示之间的时间间隔(毫秒)。该值需大于 10,否则无法收到 onAudioVolumeIndication 回调。建议设置为大于 100。
- smooth
- 设置音量提示的灵敏度平滑系数,取值范围为 0 到 10,推荐值为 3。值越大,提示越灵敏。
- reportVad
- 是否启用本地用户的语音活动检测(Voice Activity Detection):
- true:启用语音活动检测。启用后,onAudioVolumeIndication 回调中的
vad参数会报告本地用户的语音活动状态。 - false:(默认)关闭语音活动检测。关闭后,onAudioVolumeIndication 回调中的
vad参数不会报告本地用户的语音活动状态,除非引擎自动检测到语音活动。
- true:启用语音活动检测。启用后,onAudioVolumeIndication 回调中的
- connection
- 连接信息。详见 RtcConnection。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
setAudioProfile [1/2]
设置音频配置和音频场景。
virtual int setAudioProfile(AUDIO_PROFILE_TYPE profile, AUDIO_SCENARIO_TYPE scenario) __deprecated = 0;
audioScenario 成员中传入值。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;
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)
- 如果最活跃的远端说话人始终是同一用户,SDK 只会触发一次该回调。
- 如果最活跃的远端说话人变更为其他用户,SDK 会再次触发该回调并报告新的最活跃远端说话人的用户 ID。
参数
- uid
- 最活跃远端说话人的用户 ID。
onAudioQuality
报告每个远端用户发送的音频流的统计信息。
virtual void onAudioQuality(uid_t uid, int quality, unsigned short delay, unsigned short lost) __deprecated
SDK 每两秒触发一次该回调,用于报告每个正在发送音频流的远端用户的音频质量。如果频道中有多个用户发送音频流,SDK 会触发多次该回调。
参数
- uid
- 发送音频流的远端用户 ID。
- quality
- 该用户的音频质量,详见 QUALITY_TYPE。
- delay
- 从发送端到接收端的网络延迟(毫秒),包括音频采样预处理、网络传输和网络抖动缓冲造成的延迟。
- lost
- 从远端用户到接收端的音频数据包丢包率(%)。
onAudioVolumeIndication
virtual void onAudioVolumeIndication(const AudioVolumeInfo* speakers, unsigned int speakerNumber, int totalVolume)
默认情况下,该回调处于关闭状态。你可以通过调用 enableAudioVolumeIndication 方法开启该回调。开启后,当频道中有用户发送音频流时,SDK 会按照 enableAudioVolumeIndication 中设置的时间间隔触发该回调。SDK 会同时触发两个独立的 onAudioVolumeIndication 回调,分别报告发送音频流的本地用户和瞬时音量最高的最多三位远端用户的音量信息。
触发时机
当启用音量提示并有用户发送音频流时触发。
参数
- speakers
- 用户的音量信息。详见 AudioVolumeInfo。当该回调中的
speakers数组为空时,表示频道中没有远端用户或没有用户发送音频流。 - speakerNumber
- 用户总数。
- 本地用户的回调中,如果本地用户正在发送音频流,
speakerNumber的值为 1。 - 远端用户的回调中,
speakerNumber的取值范围为 [0, 3]。如果发送音频流的远端用户数量大于或等于 3,speakerNumber的值为 3。
- 本地用户的回调中,如果本地用户正在发送音频流,
- totalVolume
- 说话者的音量,取值范围为 [0, 255]。
- 本地用户的回调中,
totalVolume表示本地用户的音量。 - 远端用户的回调中,
totalVolume表示瞬时音量最高的最多三位远端用户的音量总和。如果调用了startAudioMixing,则该值为混音后的音量。
- 本地用户的回调中,
onFirstLocalAudioFramePublished
本地用户发布首帧音频时触发的回调。
virtual void onFirstLocalAudioFramePublished(int elapsed)
触发时机
- 本地客户端启用音频模块并成功调用
joinChannel。 - 本地客户端依次调用
muteLocalAudioStream(true)和muteLocalAudioStream(false)。 - 本地客户端依次调用 disableAudio 和 enableAudio。
- 本地客户端调用 pushAudioFrame 成功将音频帧推送至 SDK。
参数
- elapsed
- 从本地用户调用
joinChannel到 SDK 触发该回调的时间间隔(毫秒)。
onFirstRemoteAudioDecoded
首帧远端音频解码完成回调。
virtual void onFirstRemoteAudioDecoded(uid_t uid, int elapsed) __deprecated
触发时机
当远端用户首次发送音频流,或音频从离线恢复为在线重新发送音频时触发。
参数
- uid
- 远端用户 ID。
- elapsed
- 从本地用户调用
joinChannel加入频道到 SDK 触发该回调的时间,单位为毫秒。
onFirstRemoteAudioFrame
远端用户音频首帧到达回调。
virtual void onFirstRemoteAudioFrame(uid_t uid, int elapsed) __deprecated
参数
- uid
- 远端用户 ID。
- elapsed
- 从本地用户调用
joinChannel加入频道到 SDK 触发该回调的时间,单位为毫秒。
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)
触发时机
当远端用户的音频状态发生变化时触发。
参数
- uid
- 音频状态发生变化的远端用户 ID。
- state
- 远端音频状态。详见 REMOTE_AUDIO_STATE。
- reason
- 远端音频状态变化的原因。详见 REMOTE_AUDIO_STATE_REASON。
- elapsed
- 从本地用户调用
joinChannel方法到 SDK 触发该回调的时间间隔(毫秒)。
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
该回调报告传输层的统计信息,例如在本地用户接收到远端用户的音频数据包后,数据包的丢失率和网络时延。该回调在通话过程中每 2 秒触发一次。
触发时机
在通话过程中,每当本地用户接收到远端用户发送的音频数据包时,每 2 秒触发一次。
参数
- uid
- 远端用户 ID,即发送音频流的用户。
- delay
- 从远端用户到本地接收端的网络时延(毫秒)。
- lost
- 从远端用户到本地接收端的音频数据包丢失率(%)。
- rxKBitRate
- 接收到的音频码率(Kbps)。
onUserMuteAudio
远端用户或主播停止或恢复发送音频流回调。
virtual void onUserMuteAudio(uid_t uid, bool muted)
当远端用户调用 muteLocalAudioStream 停止或恢复发送音频流时,SDK 会触发该回调。
参数
- uid
- 远端用户 ID。
- muted
- 远端用户的音频流是否被静音:
- true:音频流被静音。
- false:音频流未被静音。