鸿蒙应用开发--audiocapture 和 AVRecorder 是两种用于音视频录制的不同模块: 从功能定位,输入输出,功能扩展性,典型应用场景几个方便来对比


在鸿蒙(HarmonyOS)开发中,audiocaptureAVRecorder 是两种用于音视频录制的不同模块,其定位和使用场景有显著差异。以下是它们的核心对比及使用建议:


一、功能定位对比

模块@ohos.multimedia.audio (AudioCapturer)@ohos.multimedia.media (AVRecorder)
核心功能纯音频采集(原始 PCM 数据音视频混合录制(封装成文件,如 MP4、AAC)
输出形式原始音频流(需手动编码保存)直接生成标准音视频文件
适用场景实时音频处理(如语音识别、通话)音视频录制保存(如录像、录音机)
技术复杂度高(需处理编码、同步)低(API 封装完善)
性能开销低(仅采集原始数据)较高(需编码和文件 IO)

二、核心差异详解

1. 输入与输出
  • audiocapture

    • 输入:仅支持麦克风音频输入。
    • 输出:原始 PCM 数据流(需手动转码为 WAV/MP3)。
    • 代码示例
      const audioCapturer = await audio.createAudioCapturer(config);
      const pcmData = await audioCapturer.read(bufferSize);
      
  • AVRecorder

    • 输入:支持麦克风(音频)和摄像头(视频)输入。
    • 输出:直接生成 MP4、AAC 等格式文件。
    • 代码示例
      const avRecorder = await media.createAVRecorder();
      avRecorder.prepare({
        audioSourceType: media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC,
        videoSourceType: media.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV,
        outputFormat: media.ContainerFormatType.CFT_MPEG_4,
      });
      avRecorder.start();
      

2. 功能扩展性
  • audiocapture

    • 优势:灵活处理原始音频流(如实时降噪、回声消除)。
    • 局限:不直接支持视频录制,文件保存需自行实现编码逻辑。
  • AVRecorder

    • 优势:开箱即用的音视频混合录制,支持主流格式和参数配置。
    • 局限:难以修改底层编码逻辑(如自定义音频采样率或视频码率)。

3. 典型应用场景
场景推荐模块原因
语音备忘录AVRecorder直接生成 AAC/MP3 文件,无需处理编码逻辑
实时语音通话audiocapture需要获取原始 PCM 进行网络传输或实时处理
视频录制(带音频)AVRecorder支持音视频同步录制,自动封装为 MP4 文件
音频分析(如分贝检测)audiocapture直接访问原始 PCM 数据,实时计算音量波形

三、代码实现对比

录音并保存为文件
使用 audiocapture(需手动编码)
import audio from '@ohos.multimedia.audio';
import fs from '@ohos.file.fs';

// 1. 创建采集器
const config: audio.AudioCapturerOptions = { /* 配置参数 */ };
const audioCapturer = await audio.createAudioCapturer(config);
await audioCapturer.start();

// 2. 创建 WAV 文件头
const wavHeader = createWavHeader(sampleRate, channels, bitDepth);

// 3. 采集 PCM 并写入文件
const file = await fs.open('audio.wav', fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE);
await fs.write(file.fd, wavHeader);

while (isRecording) {
  const pcmData = await audioCapturer.read(bufferSize);
  await fs.write(file.fd, pcmData);
}

// 4. 释放资源
await audioCapturer.stop();
fs.close(file);
使用 AVRecorder(自动编码)
import media from '@ohos.multimedia.media';

// 1. 创建录制器
const avRecorder = await media.createAVRecorder();

// 2. 配置参数
await avRecorder.prepare({
  audioSourceType: media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC,
  outputFormat: media.ContainerFormatType.CFT_MPEG_4,
  audioEncoder: media.AudioEncoderType.AUDIO_AAC,
  audioEncodeBitRate: 128000,
  url: 'file:///data/storage/audio.aac'
});

// 3. 开始录制
await avRecorder.start();

// 4. 停止并保存
setTimeout(async () => {
  await avRecorder.stop();
  await avRecorder.release();
}, 5000);

四、选择建议

  • 选择 audiocapture 当且仅当

    • 需要获取 原始音频流 进行实时处理或自定义编码。
    • 仅需音频输入,无需视频录制。
    • 对录制过程有精细控制需求(如动态调整采样率)。
  • 选择 AVRecorder 当且仅当

    • 需要快速实现音视频录制并保存为标准文件。
    • 需同时录制视频和音频。
    • 无需修改底层编码逻辑。

五、混合使用场景

若需同时 录制视频文件实时处理音频,可混合使用两个模块:

// 使用 AVRecorder 录制视频+音频到文件
const avRecorder = await media.createAVRecorder();
avRecorder.prepare({ /* 视频配置 */ });

// 使用 AudioCapturer 单独处理音频流
const audioCapturer = await audio.createAudioCapturer(config);
audioCapturer.start();

// 实时分析音频(不影响 AVRecorder 录制)
audioCapturer.on('data', (pcmBuffer) => {
  analyzeVolume(pcmBuffer);
});

// 开始录制
avRecorder.start();

总结:根据需求复杂度选择工具——AVRecorder 适合快速实现标准录制,audiocapture 则为需要深度定制音频处理的场景提供底层支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值