实时音视频
  • iOS : Objective-C
  • Android
  • macOS
  • Windows
  • HarmonyOS
  • Linux
  • Web
  • 小程序
  • Flutter
  • Electron
  • Unreal Engine
  • Unity3D
  • uni-app
  • React Native
  • Cocos Creator
  • 产品简介
  • 下载
  • 体验 App
  • 快速开始
    • 跑通示例源码
    • 集成 SDK
    • 实现视频通话
    • 场景化音视频配置
  • 通信能力
  • 房间能力
  • 音频能力
  • 视频能力
  • 直播能力
  • 其他能力
  • 最佳实践
  • 客户端 API
  • 服务端 API
  • 常见错误码
  • 常见问题
  • 文档中心
  • 实时音视频
  • 音频能力
  • 原始音频数据获取

原始音频数据获取

更新时间:2024-01-02 18:48

功能简介

SDK 为开发者提供了获取原始音频数据的功能,获取的原始音频数据格式为 PCM,开发者可以将此数据写到本地设备中,实现录制音频。

示例源码下载

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

相关源码请查看 “/ZegoExpressExample/Examples/AdvancedAudioProcessing/OriginalAudioDataAcquisition” 目录下的文件。

前提条件

在获取原始音频数据之前,请确保:

使用步骤

1 初始化 SDK

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

2 开启获取原始音频数据功能

开发者可调用 startAudioDataObserver 接口,开启音频数据回调监测。回调的音频数据类型为 ZegoAudioDataCallbackBitMask,包括有 ZegoAudioDataCallbackBitMaskCapturedZegoAudioDataCallbackBitMaskPlaybackZegoAudioDataCallbackBitMaskMixedZegoAudioDataCallbackBitMaskPlayer,这四个回调类型都需要开启。

// 需要的音频数据类型 Bitmask,此处示例四个回调都开启
ZegoAudioDataCallbackBitMask bitmask = ZegoAudioDataCallbackBitMaskCaptured | ZegoAudioDataCallbackBitMaskPlayback | ZegoAudioDataCallbackBitMaskMixed | ZegoAudioDataCallbackBitMaskPlayer;

// 需要的音频数据参数,此处示例单声道、16 K
ZegoAudioFrameParam *param = [[ZegoAudioFrameParam alloc] init];
param.channel = ZegoAudioChannelMono;
param.sampleRate = ZegoAudioSampleRate16K;

// 开启获取原始音频数据功能
[[ZegoExpressEngine sharedEngine] startAudioDataObserver:bitmask param:param];

如有需要可参考 位掩码的使用

3 设置回调获取原始音频数据并处理

开发者可调用 setAudioDataHandler 接口设置额外接收音频数据的回调。根据需要可实现回调 onCapturedAudioDataonPlaybackAudioDataonMixedAudioDataonPlayerAudioData,分别对应上述 ZegoAudioDataCallbackBitMask 中的四个音频数据类型。

// 设置音频数据回调
[[ZegoExpressEngine sharedEngine] setAudioDataHandler:self];
// 根据需要实现以下四个回调,分别对应上述 Bitmask 的四个选项

- (void)onCapturedAudioData:(const unsigned char *)data dataLength:(unsigned int)dataLength param:(ZegoAudioFrameParam *)param {
    // 本地采集音频数据,推流后可收到回调
}

- (void)onPlaybackAudioData:(const unsigned char *)data dataLength:(unsigned int)dataLength param:(ZegoAudioFrameParam *)param {
    // SDK 播放的音频数据,在非拉流状态的引擎启动状态且未使用媒体播放器播放媒体文件状态时,回调的音频数据是静音的音频数据
}

- (void)onMixedAudioData:(const unsigned char *)data dataLength:(unsigned int)dataLength param:(ZegoAudioFrameParam *)param {
    // 本地采集与 SDK 播放的声音混合后的音频数据回调
}

- (void)onPlayerAudioData:(const unsigned char *)data dataLength:(unsigned int)dataLength param:(ZegoAudioFrameParam *)param streamID:(NSString *)streamID {
    // 远端拉流音频数据,开始拉流后每条拉流数据的回调
}

4 停止音频数据回调监测

若想停止音频数据回调监测,可调用 stopAudioDataObserver 接口。

[[ZegoExpressEngine sharedEngine] stopAudioDataObserver];
本篇目录