自定义音频采集和播放

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

功能介绍

传输音视频数据时,SDK 会启用默认的音视频模块进行采集和渲染。以场景下(不限于),建议使用音频自采集功能:

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

音频自采集

操作步骤

自定义音频采集和播放前,请确保已实现基本的音视频功能。

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

API 时序图

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

从自采集模块获取数据传入 SDK。

示例代码

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

// 1. 启用外部音频数据源模式,注册音频观测器,我们使用观测器将外部的数据源传递给引擎以及把引擎返回的数据给到应用
int nRet = rtcEngine.setExternalAudioSource(true, nSampleRate, nChannels);

// 2. 启动自采集模块采集音频数据
...

// 3. 调用 pushAudioFrame 将自采集的音频数据发送给 SDK
mediaEngine->pushAudioFrame(AudioFrame);

// 4. 停止外部音频数据源模式
int nRet = rtcEngine.setExternalAudioSource(false, nSampleRate, nChannels);

API 参考

自定义音频播放

操作步骤

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

API 时序图

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

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

API 参考

注意事项

  • 回调函数里处理音频数据要尽量高效,且保证算法稳定,避免影响整个客户端或产生崩溃。

  • 需要设置 RAW_AUDIO_FRAME_OF_MODE_READ_WRITE 才可以读写和操作数据。

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

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