概述
本篇介绍即构科技音视频SDK高级功能系列第八篇——音频外部采集与渲染。
1、使用场景
1.1 外部采集
以下情况时,建议使用音频外部采集功能:
-
客户需要从现有音频流、音频文件、或者定制的采集系统中获得采集后输入,交给 SDK 传输。
-
客户有自己对 PCM 输入源做特殊的音效处理的需求,在音效处理后输入,交给 SDK 传输。
1.2 外部渲染
当客户有自己渲染的需求,例如对拉取到的原始 PCM 数据做特殊应用或者处理后再渲染,建议使用 SDK 的音频外部渲染功能。
请注意:
音频外部采集和外部渲染是一体的,所以如果开发者采用了外部渲染,则在有需要的情况下,应当自己实现外部采集。同理,采用了外部采集,则在有需要的情况下,应当自己实现外部渲染。
开发者采用外部采集和渲染后,SDK 内部不负责声音增强、噪音抑制、回音消除等功能,需要用户自己实现。
2、相关接口
音频外部采集和渲染是一体的,相关接口都位于 IAudioDataInOutput 类中,结构如下所示:
audio_in_output.h
class IAudioDataInOutput
{
public:
virtual void startCapture() = 0; // 启用外部采集
virtual void stopCapture() = 0; // 停止外部采集
virtual void startRender() = 0; // 启用外部渲染
virtual void stopRender() = 0; // 停止外部渲染
virtual bool onRecordAudioFrame(AudioFrame& audioFrame) = 0; // 输入采集数据给 SDK
virtual bool onPlaybackAudioFrame(AudioFrame& audioFrame) = 0; // 从 SDK 获取可渲染数据
};
其中,AudioFrame 表示音频帧,具体结构为:
audio_in_output.h
struct AudioFrame
{
int frameType; // 帧类型,参考 FrameType
int samples;
int bytesPerSample;
int channels;
int sampleRate;
double timeStamp;
int configLen;
int bufLen;
unsigned char* buffer;
};
enum FrameType
{
TYPE_PCM = 0x1001, //PCM 帧
TYPE_AAC_STREAM = 0x1003, //AAC 编码帧
};
当 frameType 为 TYPE_PCM 时,各字段的含义说明:
当 frameType 为 TYPE_AAC_STREAM 时,各字段的含义说明:
关于 buffer 结构,请注意:
如果 configLen == 0,则 buffer 中全部是 aac encode data 数据。
如果 configLen == bufLen,则 buffer 中全部是 aac special config 数据。
如果 (configLen != 0) && (configLen < bufLen),则 buffer 中含有 configLen 长度的 aac special config 数据和 (bufLen - configLen) 长度的 encode data 数据。
下文将详细讲述如何使用 IAudioDataInOutput 实现音频外部采集和渲染。
2.1 开启外部音频设备
使用音频外部采集和外部渲染之前,必须先启用外部音频设备,调用如下接口:
zego-api-external-audio-device-oc.h
/**
设置外部音频设备,包括外部音频采集和外部音频渲染
@param enable true 开启,false 关闭
@discussion 必须在 InitSDK 之前设置;
@discussion 开发者采用外部采集和渲染后,SDK 内部不负责声音增强、噪音抑制、回音消除等功能,需要用户自己实现。
*/
+ (void)enableExternalAudioDevice:(bool)enable;
2.2 音频外部采集
音频外部采集的接口调用步骤如下图所示:
请注意
调用 onRecordAudioFrame(AudioFrame& audioFrame) 输入采集数据给 SDK 时,audioFrame 只是输入参数
数据 buffer 内存由外部调用者负责分配和释放,各字段均由外部调用者填写。
2.3 音频外部渲染
音频外部渲染的接口调用步骤如下图所示:
请注意
调用 onPlaybackAudioFrame(AudioFrame& audioFrame) 从 SDK 获取可渲染数据时,参数
audioFrame 即为输入参数,也为输出参数。数据 buffer 内存由外部调用者负责分配和释放。
当 audioFrame 作为输入参数时,外部渲染模块参数需要按照如下方式填写:
当 audioFrame 作为输出参数时,SDK 会按照外部渲染要求填充好 buffer 中的数据,会修改 bufLen = 2 x samples x channels,其他字段不变。
最后
以上就是辛勤冬日为你收集整理的iOS音频外部采集与渲染(音视频SDK高级功能八)的全部内容,希望文章能够帮你解决iOS音频外部采集与渲染(音视频SDK高级功能八)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复