You need to enable JavaScript to run this app.
文档中心
实时音视频

实时音视频

复制全文
下载 pdf
自定义音频采集和渲染
Native 端自定义音频采集和渲染
复制全文
下载 pdf
Native 端自定义音频采集和渲染
RTC SDK 默认使用内置模块进行音频采集和渲染。在特定场景下,内置模块可能无法满足你的需求,比如:​
  • 复用音视频应用中已有音频采集和渲染模块。​
  • 对采集到的音视频数据进行一些传输前处理(美声、音效、AI 降噪等)。​
  • 解决音频采集设备被占用问题。​
在这些场景下,你可以参考本文,使用自定义方式进行音频的采集和渲染。​
前提条件​
开始自定义采集和渲染前,请确保你已经集成 v3.40 及以上版本的 RTC SDK,并实现基本的音频通话功能。​
集成步骤​
以 Android 为例,你可以参照以下步骤,实现自定义音频采集和渲染。​
自定义音频采集​
  1. 调用 setAudioSourceType 设置音频采集模式为自定义采集。​
  • ​
    // mRTCVideo 是你的 RTCVideo 实例​
    mRTCVideo.setAudioSourceType(AudioSourceType.AUDIO_SOURCE_TYPE_EXTERNAL);​
    ​
  1. 自行采集并处理音频数据。​
  1. 每隔 10ms 调用 pushExternalAudioFrame 将处理好的音频数据推送到 RTC SDK。​
  • 核心逻辑示例:​
  • ​
    // 每10ms的数据大小​
    int size = 16 * 10;​
    if (isFirstPush) {​
    // 建议第一次时传入200ms的缓冲数据,避免噪音​
    size = size * 20;​
    isFirstPush = false;​
    }​
    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;​
    ​
    int nRead = 0;​
    //伪代码,以客户采集方式为准,但必须遵守每10ms调用一次,一次push 10ms的音频数据​
    if (fileData != null) {​
    nRead = Integer.min(size * 2, fileDataBufferSize - fileDataOffset);​
    pushBuffer.put(fileData, fileDataOffset, nRead);​
    fileDataOffset += nRead;​
    }​
    Log.i(TAG, "offset:" + fileDataOffset + " read:" + nRead);​
    if (nRead == 0) {​
    fileDataOffset = 0;​
    }​
    audioFrame.buffer = pushBuffer.array();​
    mRTCVideo.pushExternalAudioFrame(audioFrame); ​
    ​
自定义音频渲染​
  1. 调用 setAudioRenderType 设置音频渲染方式为自定义渲染。​
  • ​
    mRTCVideo.setAudioRenderType(AudioRenderType.AUDIO_RENDER_TYPE_EXTERNAL);​
    ​
  1. 进入房间后,每隔 10ms 调用 pullExternalAudioFrame 拉取远端用户的音频数据。​
  • 核心逻辑示例:​
  • ​
    // audioFrame 是一个预先创建的 AudioFrame 对象,用于接收数据​
    if (mRTCVideo != null) {​
    mRTCVideo.pullExternalAudioFrame(audioFrame);​
    // 在此处添加你的音频播放/渲染逻辑​
    }​
    ​
  1. 在本地渲染拉取的音频数据。​
注意事项​
  1. 采用自定义音频采集和渲染时,请自行实现音频 3A(回声消除 AEC、自动增益控制 AGC、噪声抑制 ANS)处理。​
  1. 如果需要从自定义采集切换回内部采集,需要先停止自定义采集任务,再调用 setAudioSourceType 并手动开启内部采集。​
  • ​
    // 1. 停止你的定时推送任务​
    // yourCustomCaptureTimer.stop();​
    ​
    // 2. 切换回内部采集​
    mRTCVideo.setAudioSourceType(AudioSourceType.AUDIO_SOURCE_TYPE_INTERNAL);​
    mRTCVideo.startAudioCapture(); // 手动开启内部采集​
    ​
API 参考​
​
​
最近更新时间:2026.08.19 15:47:47
这个页面对您有帮助吗?
有用
有用
无用
无用