# AudioCodec_1 **Repository Path**: gwx1427087/audio-codec_1 ## Basic Information - **Project Name**: AudioCodec_1 - **Description**: 基于系统能力的音频编解码示例 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 9 - **Created**: 2025-07-17 - **Last Updated**: 2025-07-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于鸿蒙编解码能力实现音频编解码 ### 介绍 本示例基于OH_AVCodec编解码能力和OH_Audio能力,实现音频的播放、压缩、转换和录制等功能。通过调用Native侧的音频采集器实现音频的录制,通过编码器,解码器,以及封装和解封装,实现音频的播放和转码。基于本示例可帮助应用开发需要编解码进行音频播放和录制的场景。 - 音频播放的主要流程:选择本地音频->解封装->解码->播放 - 音频转码的主要流程:选择本地音频->解封装->解码->编码->封装->保存文件到本地 - 音频录制的主要流程:麦克风采集->编码->封装->保存文件到本地 ### 效果预览 | 应用主界面 | 应用使用展示 | |------------------------------------|------------------------------------| | ![1.png](screenshots/device/1.png) | ![2.gif](screenshots/device/2.gif) | ### 工程目录 ``` ├──entry/src/main/cpp // Native层 │ ├──capbilities │ │ ├──include │ │ │ ├──AudioCapturer.h // 音频采集接口定义 │ │ │ ├──AudioDecoder.h // 音频解码接口定义 │ │ │ ├──AudioEncoder.h // 音频编码接口定义 │ │ │ ├──AVCodecSampleError.h // 日志参数接口定义 │ │ │ ├──Demuxer.h // 解封装接口定义 │ │ │ ├──Muxer.h // 封装接口定义 │ │ │ ├──SampleCallback.h // 编解码回调接口定义 │ │ │ └──SampleInfo.h // 功能实现公共类 │ │ │ └──src │ │ │ ├──AudioCapturer.cpp // 音频采集实现 │ │ │ ├──AudioDecoder.cpp // 音频解码实现 │ │ │ ├──AudioEncoder.cpp // 音频编码实现 │ │ │ ├──Demuxer.cpp // 解封装实现 │ │ │ ├──Muxer.cpp // 封装实现 │ │ │ └──SampleCallback.cpp // 编解码回调实现 │ ├──player │ │ ├──include │ │ │ ├──Player.h // Native层播放功能调用逻辑接口 │ │ │ ├──PlayerNative.h // Native层 播放的入口 │ │ │ └──Summary.h // Native层 转码的入口 │ │ │ └──src │ │ │ ├──Player.cpp // Native层播放功能调用逻辑的实现 │ │ │ ├──PlayerNative.cpp // Native层 播放的入口 │ │ │ └──Summary.cpp // Native层 转码的入口 │ │──recorder │ │ ├──include │ │ │ ├──Recorder.h // Native层录制功能调用逻辑的接口 │ │ │ └──RecorderNative.h // Native层 录制的入口 │ │ │ └──src │ │ │ ├──Recorder.cpp // Native层录制功能调用逻辑的实现 │ │ │ └──RecorderNative.cpp // Native层 录制的入口 │ ├──types │ │ ├──libplayer // 播放模块暴露给UI层的接口 │ │ └──librecorder // 录制模块暴露给UI层的接口 │ └──CMakeLists.txt // cmake配置文件 ├──ets // ui层 │ ├──common │ │ ├──utils │ │ │ └──Logger.ets // 日志工具 │ │ │ └──MusicMetadataService.ets // 获取音频元数据 │ │ └──CommonConstants.ets // 参数常量 │ ├──component │ │ ├──SavePicker.ets // 保存格式 │ │ └──SelectPicker.ets // 录制参数 │ ├──entryability │ │ └──EntryAbility.ets │ ├──entrybackupability │ │ └──EntryBackupAbility.ets │ └──pages │ │ ├──BehaviorChoice.ets // 播放转码页面 │ │ ├──Index.ets // 主页面 │ │ └──Recorder.ets // 录制页面 ├──resources // 用于存放应用所用到的资源文件 │ ├──base // 该目录下的资源文件会被赋予唯一的ID │ │ ├──element // 用于存放字体和颜色 │ │ ├──media // 用于存放图片 │ │ └──profile // 应用入口首页 │ ├──en_US // 设备语言是美式英文时,优先匹配此目录下资源 │ └──zh_CN // 设备语言是简体中文时,优先匹配此目录下资源 └──module.json5 // 模块配置信息 ``` ### 使用说明 #### 录制 1. 点击“录制”按钮,弹出是否允许“AudioCodec”访问你的麦克风,点击“允许”。 2. 点击“允许”后,弹出选择录制格式,选好需要录制的格式后,点击“确定”开始录制,点击“暂停”图标暂停录制,点击“继续”图标继续录制,点击红色图标终止录制。 3. 终止录制后,弹出目标保存格式,选好格式之后,点击“确定”,弹出是否保存到本地,点击“确定”。 #### 播放 1. 点击“本地音频选择”按钮,选择要播放的音频文件,点击“播放”图标开始播放音频,点击“暂停”图标暂停播放音频。 2. 点击“转码”按钮,弹出转码格式,选好需要转码的格式后后,点击“确定”,弹出是否保存到本地,点击“确定”。 #### 实现说明 1. 通过[picker](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/photoaccesshelper-photoviewpicker)选择本地音频文件,然后选择播放或转码操作,转码完成后选择是否[保存文件](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/photoaccesshelper-savebutton)到本地。 2. 使用[AVDemuxer解封装](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/audio-video-demuxer)音频文件,输出AAC\MP3\FLAC等格式码流。 3. 使用[AVMuxer封装](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/audio-video-muxer)音频文件,输出MP3\MP4\AMR\WAV等格式文件。 4. 使用[音频解码器](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/audio-decoding)将AAC\MP3\FLAC等格式码流解码为PCM码流。 5. 使用[音频编码器](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/audio-encoding)将PCM码流编码为AAC\MP3\FLAC等格式码流。 6. 使用[OH_Audio音频录制器](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/using-ohaudio-for-recording)录制音频文件。 7. 使用[OH_Audio音频播放器](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/using-ohaudio-for-playback)播放音频文件。 #### 相关权限 1. ohos.permission.KEEP_BACKGROUND_RUNNING:允许Service Ability在后台持续运行。 2. ohos.permission.INTERNET:允许使用Internet网络。 #### 约束与限制 1. 本示例仅支持标准系统上运行,支持设备:华为手机。 2. HarmonyOS系统:HarmonyOS 5.0.4 Release及以上。 3. DevEco Studio版本:DevEco Studio 5.0.4 Release及以上。 4. HarmonyOS SDK版本:HarmonyOS 5.0.4 Release SDK及以上