自定义音频采集和播放

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

功能介绍

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

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

音频自采集

操作步骤

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

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

API 时序图

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

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

示例代码

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

// Swift
// swift
// 推入数据类型为 rawData
rtcKit.pushExternalAudioFrameRawData("your rawData", samples: "per push samples", timestamp: 0)

// 推入数据类型为 CMSampleBuffer
rtcKit.pushExternalAudioFrameSampleBuffer("your CMSampleBuffer")

// Objective-C
// 推入数据类型为 rawData
[rtcKit pushExternalAudioFrameRawData: "your rawData" samples: "per push samples", timestamp: 0];

// 推入数据类型为 CMSampleBuffer
[rtcKit pushExternalAudioFrameSampleBuffer: "your CMSampleBuffer"];

API 参考

自定义音频播放

操作步骤

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

API 时序图

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

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

示例代码

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

// Swift
// 拉取数据类型为 rawData
rtcKit.pullPlaybackAudioFrameRawData("your rawData", lengthInByte: "data length in byte of the external audio data")

// 拉取数据类型为 CMSampleBuffer
rtcKit.pullPlaybackAudioFrameSampleBufferByLengthInByte(lengthInByte: "data length in byte of the external audio data")

// Objective-C
// 拉取数据类型为 rawData
[rtcKit pullPlaybackAudioFrameRawData: "your rawData" lengthInByte: "data length in byte of the external audio data"];

// 拉取数据类型为 CMSampleBuffer
[rtcKit pullPlaybackAudioFrameSampleBufferByLengthInByte: lengthInByte: "data length in byte of the external audio data"];

API 参考

  • enableExternalAudioSink
  • disableExternalAudioSink
  • pullPlaybackAudioFrameRawData
  • pullPlaybackAudioFrameSampleBufferByLengthInByte

注意事项

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

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

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

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