原始音频数据

更新时间: 2026/07/08 17:36:30

NERTC Flutter SDK 的音频模块会严格控制声音设备的采集和播放逻辑,同时支持对采集到的音视频原始数据进行自定义的前处理和后处理,获取想要的播放效果。适用于非标设备接入、自定义音频效果、语音处理、语音识别等场景。

  • 前处理:在音频数据发送到编码器前获取原始的音频数据进行修改,主要针对本地麦克风采集到的音频数据或自定义外部音频流。
  • 后处理:即在音频数据发送给解码器后获取原始的音频数据进行修改,主要针对接收到的远端用户音频数据。

NERTC Flutter SDK 通过提供 NERtcAudioFrameEventCallback 类,实现采集、修改原始音频数据功能。

前提条件

在使用原始数据处理功能前,请确保您已在项目中实现基本的实时音视频功能。

注意事项

技术原理

rawdata.png

实现方法

API 调用时序

以实现修改采集音频的音频数据为例,API 调用时序如下图所示。

sequenceDiagram
    participant 应用层
    participant NERtc Flutter SDK
    应用层->>NERtc Flutter SDK: setRecordingAudioFrameParameters
    应用层->>NERtc Flutter SDK: setAudioFrameEventCallback
    NERtc Flutter SDK-->>应用层: onRecordFrame
    Note over 应用层, NERtc Flutter SDK: 自行处理音频数据
    应用层->>NERtc Flutter SDK: onRecordFrame

配置步骤

  1. 设置回调的音频采样率。

  2. 调用 setAudioFrameEventCallback 方法注册原始音频帧回调。

  3. SDK 返回回调。

  4. 用户拿到音频数据后,需要根据场景自行进行处理。

  5. 完成音频数据处理后,您可以直接进行自播放,或根据场景需求再通过 onRecordFrameonPlaybackFrame 回调发送给 SDK。

示例代码

///设置音频回调参数
final format = NERtcAudioFrameRequestFormat(
      sampleRate: 48000,
      channels: 1,
      opMode: 0,
    );
   
await _engine.setRecordingAudioFrameParameters(format);
await _engine.setPlaybackAudioFrameParameters(format);
await _engine.setPlaybackBeforeMixingAudioFrameParameters(format);
await _engine.setMixedAudioFrameParameters(format);
_engine.setAudioFrameEventCallback(this);

///音频数据回调处理
@Override
void onRecordFrame(NERtcAudioFrame frame) {
    final pcmData = frame.data;
    debugPrint(
    'record pcm bytes=${pcmData?.length ?? 0}, '
    'sampleRate=${frame.format?.sampleRate}, '
    'channels=${frame.format?.channels}',
    );
}

@Override
void onPlaybackFrame(NERtcAudioFrame frame) {
    final pcmData = frame.data;
    debugPrint(
    'record pcm bytes=${pcmData?.length ?? 0}, '
    'sampleRate=${frame.format?.sampleRate}, '
    'channels=${frame.format?.channels}',
    );
}

@Override
void onPlaybackAudioFrameBeforeMixingWithUserID(long userID, NERtcAudioFrame frame) {
    final pcmData = frame.data;
    debugPrint(
    'record pcm bytes=${pcmData?.length ?? 0}, '
    'sampleRate=${frame.format?.sampleRate}, '
    'channels=${frame.format?.channels}',
    );
}

@Override
public void onMixedAudioFrame(NERtcAudioFrame frame) {
    final pcmData = frame.data;
    debugPrint(
    'record pcm bytes=${pcmData?.length ?? 0}, '
    'sampleRate=${frame.format?.sampleRate}, '
    'channels=${frame.format?.channels}',
    );
}
此文档是否对你有帮助?
有帮助
去反馈
  • 前提条件
  • 注意事项
  • 技术原理
  • 实现方法
  • API 调用时序
  • 配置步骤
  • 示例代码