以下场景中,建议使用自定义音频采集功能:
当开发者有自己渲染的需求,例如对拉取到的原始 PCM 数据做特殊应用或者处理后再渲染,建议使用 SDK 的自定义音频渲染功能。
音频的采集和渲染分为 3 种情况:
开发者请根据自己的业务场景,选择合适的音频采集和渲染方式。
请参考 下载示例源码 获取源码。
相关源码请查看 “/ZegoExpressExample/AdvancedAudioProcessing/src/main/java/im/zego/advancedaudioprocessing/customaudiocaptureandrendering” 目录下的文件。
在实现自定义音频采集与渲染之前,请确保:
下图为 API 接口调用时序图:
请参考 快速开始 - 实现流程 的 “创建引擎”。
enableCustomAudioIO 需要在 startPublishingStream、startPlayingStream、startPreview、createMediaPlayer、createAudioEffectPlayer 和 createRealTimeSequentialDataManager 之前调用才有效。
可调用 ZegoCustomAudioConfig 设置 sourceType = ZegoAudioSourceType.CUSTOM
,再调用 enableCustomAudioIO 接口开启自定义音频 IO 功能。
// 设置音频源为自定义采集和渲染
ZegoCustomAudioConfig config=new ZegoCustomAudioConfig();
config.sourceType= ZegoAudioSourceType.CUSTOM;
engine.enableCustomAudioIO(true,config);
请参考 快速开始 - 实现流程 的 “登录房间”、“推流”和“拉流”。
打开音频采集设备,将采集到的音频数据通过 sendCustomAudioCaptureAACData 或 sendCustomAudioCapturePCMData 传递给引擎。
在使用 sendCustomAudioCaptureAACData 或 sendCustomAudioCapturePCMData 接口采集音频时,最终给到的 ByteBuffer 类型必须是 directBuffer(默认不是该类型),即需要通过 allocateDirect
方法初始化,否则无法正常使用。
使用 fetchCustomAudioRenderPCMData 从引擎中获取音频数据,拿到音频数据后再通渲染设备播放。
调用自定义音频采集渲染相关接口的时机?
调用自定义音频采集渲染相关接口的频率?
最优的方式是按照物理音频设备的时钟驱动,在物理采集设备采集到数据的时候调用 sendCustomAudioCaptureAACData 和 sendCustomAudioCapturePCMData;在物理渲染设备需要数据时调用 fetchCustomAudioRenderPCMData。
如果开发者的实际场景中没有具体的物理设备来驱动,建议每 10 ms ~ 20 ms 调用一次上述接口。
调用 fetchCustomAudioRenderPCMData,如果 SDK 内部数据不足 “dataLength” 时, SDK 如何处理?
在保证 “param” 填写正常的情况下,当 SDK 内部的数据不足 “dataLength” 时,不足的剩余长度按照静音数据补齐。
Android 设备外接麦克风,使用自定义音频采集与渲染,若中途用户戴上了蓝牙耳机,如何使用 Express SDK 采集音频?
由于 Express SDK 内部不会自动切换到内部采集,需要开发者做业务逻辑处理:停止外部采集。移动端 SDK 会根据系统当前的 route(音频路由) 来选择设备,如果系统的 route 是蓝牙,就会使用蓝牙进行采集。
联系我们
文档反馈