HarmonyOS鸿蒙Next中ArkTS的AVRecorder录出音频m4a与amr转码实现

HarmonyOS鸿蒙Next中ArkTS的AVRecorder录出音频m4a与amr转码实现

  1. 用AVRecorder录音,然后从沙盒读取buf文件,如何将读取到的buf语音格式转换为amr格式?

  2. 接收到服务器的amr格式语音buf,如何转换为m4a进行本地播放(media.AVPlayer)?

最好能给个demo,方便快速接入,这个比较急,麻烦加急下。

3 回复

更多关于HarmonyOS鸿蒙Next中ArkTS的AVRecorder录出音频m4a与amr转码实现的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,ArkTS的AVRecorder可以录制音频并保存为m4a或amr格式。要实现这两种格式之间的转码,可以使用鸿蒙提供的媒体处理能力。

  1. 录制音频:使用AVRecorder录制音频时,可以通过设置audioEncoder参数为AVRecorder.AudioEncoder.AACAVRecorder.AudioEncoder.AMR_NB来分别生成m4a或amr格式的音频文件。

  2. 转码实现:鸿蒙系统提供了MediaCodecMediaExtractor等API,可以用于音频文件的解码和重新编码。具体步骤如下:

    • 使用MediaExtractor提取原始音频数据。
    • 使用MediaCodec对提取的音频数据进行解码,得到PCM格式的音频数据。
    • 使用MediaCodec将PCM数据重新编码为目标格式(m4a或amr)。
    • 将编码后的数据写入新的音频文件。
  3. 代码示例:

    // 假设已录制好amr文件,现转为m4a
    let extractor = new MediaExtractor();
    extractor.setDataSource('input.amr');
    let codec = new MediaCodec();
    codec.configure({
        format: 'audio/mp4a-latm', // m4a格式
        sampleRate: 44100,
        channelCount: 2,
        bitRate: 128000
    });
    codec.start();
    // 处理数据并写入新文件
    

在HarmonyOS鸿蒙Next中,使用ArkTS的AVRecorder录制音频后,可以通过MediaCodecMediaMuxer实现m4a与amr格式的转码。首先,使用AVRecorder录制音频并保存为原始格式。然后,通过MediaCodec解码原始音频数据,再使用MediaMuxer将解码后的数据编码为目标格式(m4a或amr)。具体实现需配置编解码器参数,并处理音频数据的输入输出流。

回到顶部