- 文档首页
实时音视频
实时音视频
开发指南
音频管理
自定义音频采集和渲染
Native 端自定义音频采集和渲染
自定义音频采集和渲染
Native 端自定义音频采集和渲染
Native 端自定义音频采集和渲染
RTC SDK 默认使用内置模块进行音频采集和渲染。在特定场景下,内置模块可能无法满足你的需求,比如:
- 对采集到的音视频数据进行一些传输前处理(美声、音效、AI 降噪等)。
在这些场景下,你可以参考本文,使用自定义方式进行音频的采集和渲染。
前提条件
开始自定义采集和渲染前,请确保你已经集成 v3.40 及以上版本的 RTC SDK,并实现基本的音频通话功能。
集成步骤
以 Android 为例,你可以参照以下步骤,实现自定义音频采集和渲染。
自定义音频采集
- 调用 setAudioSourceType 设置音频采集模式为自定义采集。
// mRTCVideo 是你的 RTCVideo 实例
mRTCVideo.setAudioSourceType(AudioSourceType.AUDIO_SOURCE_TYPE_EXTERNAL);
- 每隔 10ms 调用 pushExternalAudioFrame 将处理好的音频数据推送到 RTC SDK。
// 建议第一次时传入200ms的缓冲数据,避免噪音
ByteBuffer pushBuffer = ByteBuffer.allocate(size * 2);
AudioFrame audioFrame = new AudioFrame();
audioFrame.channel = AudioChannel.AUDIO_CHANNEL_MONO;
audioFrame.sampleRate = AudioSampleRate.AUDIO_SAMPLE_RATE_16000;
audioFrame.samples = size;
//伪代码,以客户采集方式为准,但必须遵守每10ms调用一次,一次push 10ms的音频数据
nRead = Integer.min(size * 2, fileDataBufferSize - fileDataOffset);
pushBuffer.put(fileData, fileDataOffset, nRead);
fileDataOffset += nRead;
Log.i(TAG, "offset:" + fileDataOffset + " read:" + nRead);
audioFrame.buffer = pushBuffer.array();
mRTCVideo.pushExternalAudioFrame(audioFrame);
自定义音频渲染
- 调用 setAudioRenderType 设置音频渲染方式为自定义渲染。
mRTCVideo.setAudioRenderType(AudioRenderType.AUDIO_RENDER_TYPE_EXTERNAL);
- 进入房间后,每隔 10ms 调用 pullExternalAudioFrame 拉取远端用户的音频数据。
// audioFrame 是一个预先创建的 AudioFrame 对象,用于接收数据
if (mRTCVideo != null) {
mRTCVideo.pullExternalAudioFrame(audioFrame);
注意事项
- 采用自定义音频采集和渲染时,请自行实现音频 3A(回声消除 AEC、自动增益控制 AGC、噪声抑制 ANS)处理。
- 如果需要从自定义采集切换回内部采集,需要先停止自定义采集任务,再调用 setAudioSourceType 并手动开启内部采集。
// yourCustomCaptureTimer.stop();
mRTCVideo.setAudioSourceType(AudioSourceType.AUDIO_SOURCE_TYPE_INTERNAL);
mRTCVideo.startAudioCapture(); // 手动开启内部采集
API 参考
最近更新时间:2026.08.19 15:47:47