实时音视频
  • iOS
  • Android : Java
  • macOS
  • Windows
  • HarmonyOS
  • Linux
  • Web
  • 小程序
  • Flutter
  • Electron
  • Unity3D
  • uni-app
  • React Native
  • Cocos Creator
  • 产品简介
  • 下载
  • 体验 App
  • 快速开始
    • 跑通示例源码
    • 集成 SDK
    • 实现视频通话
    • 实时音视频 SDK 与实时语音 SDK 差异
    • 场景化音视频配置
  • 基础功能
  • 进阶功能
  • 最佳实践
  • 常见错误码
  • 服务端 API
  • 客户端 API
  • 常见问题

自定义音频采集与渲染

更新时间:2023-04-14 16:13

1 功能简介

1.1 自定义音频采集

以下场景中,建议使用自定义音频采集功能:

  • 开发者需要从现有音频流、音频文件、或者定制的采集系统中获得采集后输入,交给 SDK 传输。
  • 开发者有自己对 PCM 输入源做特殊的音效处理的需求,在音效处理后输入,交给 SDK 传输。

1.2 自定义音频渲染

当开发者有自己渲染的需求,例如对拉取到的原始 PCM 数据做特殊应用或者处理后再渲染,建议使用 SDK 的自定义音频渲染功能。

音频的采集和渲染分为 3 种情况:

  • 内部采集、内部渲染
  • 自定义采集、自定义渲染
  • 自定义采集、内部渲染

开发者请根据自己的业务场景,选择合适的音频采集和渲染方式。

2 示例源码下载

请参考 下载示例源码 获取源码。

相关源码请查看 “/ZegoExpressExample/AdvancedAudioProcessing/src/main/java/im/zego/advancedaudioprocessing/customaudiocaptureandrendering” 目录下的文件。

3 前提条件

在实现自定义音频采集与渲染之前,请确保:

4 使用步骤

4.1 初始化 SDK

请参考 快速开始 - 实现流程 的 “3.1 创建引擎”。

4.2 开启自定义音频采集渲染功能

// 设置音频源为自定义采集渲染
    ZegoCustomAudioConfig config=new ZegoCustomAudioConfig();
    config.sourceType= ZegoAudioSourceType.CUSTOM;
    engine.enableCustomAudioIO(true,config);

4.3 登录房间后推/拉流

请参考 快速开始 - 实现流程 的 “3.2 登录房间”、“3.3 推流”和“3.4 拉流”。

4.4 采集音频数据

打开音频采集设备,将采集到的音频数据通过 sendCustomAudioCaptureAACDatasendCustomAudioCapturePCMData 传递给引擎。

在使用 sendCustomAudioCaptureAACDatasendCustomAudioCapturePCMData 接口采集音频时,最终给到的 ByteBuffer 类型必须是 directBuffer(默认不是该类型),即需要通过 allocateDirect 方法初始化,否则无法正常使用。

4.5 渲染音频数据

使用 fetchCustomAudioRenderPCMData 从引擎中获取要渲染的数据,拿到音频数据后再通渲染设备播放。

5 API 参考列表

方法 描述
enableCustomAudioIO 开启自定义音频采集渲染
sendCustomAudioCaptureAACData 向 SDK 发送自定义采集的 AAC 数据
sendCustomAudioCapturePCMData 向 SDK 发送自定义采集的 PCM 数据
fetchCustomAudioRenderPCMData 从 SDK 获取要自定义渲染的 PCM 数据

6 常见问题

  1. 调用自定义音频采集渲染相关接口的时机?

    各接口的调用时机如下:

  2. 调用自定义音频采集渲染相关接口的频率?

    最优的方式是按照物理音频设备的时钟驱动,在物理采集设备采集到数据的时候调用 sendCustomAudioCaptureAACDatasendCustomAudioCapturePCMData;在物理渲染设备需要数据时调用 fetchCustomAudioRenderPCMData

    如果开发者的实际场景中没有具体的物理设备来驱动,建议每 10 ms ~ 20 ms 调用一次上述接口。

  3. 调用 fetchCustomAudioRenderPCMData,如果 SDK 内部数据不足 “dataLength” 时, SDK 如何处理?

    在保证 “param” 填写正常的情况下,当 SDK 内部的数据不足 “dataLength” 时,不足的剩余长度按照静音数据补齐。

  1. Android 设备外接麦克风,使用自定义音频采集与渲染,若中途用户戴上了蓝牙耳机,如何使用 Express SDK 采集音频?

    由于 Express SDK 内部不会自动切换到内部采集,需要开发者做业务逻辑处理:停止外部采集。移动端 SDK 会根据系统当前的 route(音频路由) 来选择设备,如果系统的 route 是蓝牙,就会使用蓝牙进行采集。