功能介绍
传输音视频数据时,SDK 会启用默认的音视频模块进行采集和渲染。以场景下(不限于),建议使用音频自采集功能:
- 使用非麦克风采集的音频源
- 需要对输入音频源做前处理(美声/变音)
- 音频采集设备被系统占用(已有音频采集源)
- 需要通过特定的采集系统中获取数据(录屏数据)
音频自采集
操作步骤
自定义音频采集和播放前,请确保已实现基本的音视频功能。
joinChannelByToken
前,通过调用setExternalAudioSource
指定外部音频采集设备。- 指定外部采集设备后,开发者自行管理音频数据采集和处理。
- 完成音频数据处理后,再通过
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 参考
自定义音频播放
操作步骤
joinChannelByToken
前,通过调用enableExternalAudioSink
开启并设置外部音频渲染。- 成功加入频道后,调用
pullPlaybackAudioFrameRawData
或pullPlaybackAudioFrameSampleBufferByLengthInByte
拉取远端发送的音频数据。 - 开发者自行渲染并播放拉取到的音频数据。
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
才可以读写和操作数据。 -
自定义音频采集和播放场景中,需要开发者具有采集或渲染音频数据的能力:
- 自定义音频采集场景中,你需要自行管理音频数据的采集和处理。
- 自定义音频渲染场景中,你需要自行管理音频数据的处理和播放。