自定义音频采集和播放

最近更新时间:2022-09-20 05:17:40

功能介绍

实时音视频传输过程中,RTC SDK 通常会启动默认的音视频模块进行采集和渲染。在以下场景中,你可能会发现默认的音视频模块无法满足开发需求:

  • 使用非麦克风采集的音频源
  • 需要对输入音频源做前处理(美声/变音)
  • 音频采集设备被系统占用(已有音频采集源)
  • 需要通过特定的采集系统中获取数据(录屏数据)

自定义音频采集

参考如下步骤,在你的项目中实现自定义音频采集功能:

  1. joinChannel 前,通过调用 setExternalAudioSource 指定外部音频采集设备。
  2. 指定外部采集设备后,开发者自行管理音频数据采集和处理。
  3. 完成音频数据处理后,再通过 pushExternalAudioFrame 发送给 SDK 进行后续操作。

调用 setExternalAudioSource 方法且第一个参数设为 true 时,将终端麦克风采集。设置为 false 时将继续麦克风采集。

API 时序图

参考下图时序在你的项目中实现自定义音频采集。

示例代码

参考下文代码在你的项目中实现自定义音频采集。

// 首先开启外部音频源模式
rtcEngine.setExternalAudioSource(
    true,      // 开启外部音频源
    44100,     // 采样率,可以有8k,16k,32k,44.1k和48kHz等模式
    1          // 外部音源的通道数,最多2个
);

// 持续的输入音频数据
rtcEngine.pushExternalAudioFrame(
    data,             // byte[] 类型的音频数据
    timestamp         // 时间戳
);

//
rtcEngine.setExternalAudioSource(
    false,      // 关闭外部音频源
    44100,     // 采样率,可以有8k,16k,32k,44.1k和48kHz等模式
    1          // 外部音源的通道数,最多2个
);

API 参考

自定义音频渲染

参考如下步骤,在你的项目中实现自定义音频播放功能:

  1. joinChannel 前,通过调用 setExternalAudioSink 开启并设置外部音频渲染。
  2. 成功加入频道后,调用 pullPlaybackAudioFrame 拉取远端发送的音频数据。
  3. 开发者自行渲染并播放拉取到的音频数据。

API 时序图

参考下图时序在你的项目中实现自定义音频渲染。

从 SDK 拉取远端音频数据并进行播放。

开发注意事项

自定义音频采集和播放场景中,需要开发者具有采集或渲染音频数据的能力:

  • 自定义音频采集场景中,你需要自行管理音频数据的采集和处理。
  • 自定义音频渲染场景中,你需要自行管理音频数据的处理和播放。