OpenHarmony WMA音频解码器
📋 项目概述
本项目是参加OpenHarmony多媒体编解码竞赛的参赛作品,旨在为OpenHarmony平台开发一个完整的WMA音频解码器,支持WMA V1/V2/PRO格式解码,提供NDK接口和ArkTS应用层。
目前仓库还是私有状态,待比赛结束后会开放出来,有兴趣的朋友可以先加个关注或私聊。
🎯 竞赛要求
- 支持格式: WMA V1/V2/PRO音频解码
- 平台要求: OpenHarmony 5.0+ (API 15)
- 接口要求: NDK接口支持,支持能力查询
- 输出要求: PCM数据,播放声音正常
- 文档要求: API参考、开发指南
🏆 项目特色
- ✅ 静态链接方案: 避免动态加载问题,提升性能
- ✅ 完整技术栈: FFmpeg + NDK + NAPI + ArkTS
- ✅ 模拟数据支持: 提供真实音频体验的测试环境
- ✅ 详细文档: 完整的API参考和开发指南
🏗️ 技术架构
整体架构(静态链接)
scss
┌─────────────────────────────────────────────────────────────┐
│ OpenHarmony 应用 │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ ArkTS 应用层 │ │
│ │ ┌─────────────────┐ ┌─────────────────┐ ┌──────────┐ │ │
│ │ │ 音频播放器 │ │ 文件管理器 │ │ 测试应用 │ │ │
│ │ └─────────────────┘ └─────────────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ NAPI 函数 (内置) │ │
│ │ ┌─────────────────────────────────────────────────────┐ │ │
│ │ │ napi_wrapper_c.c │ │ │
│ │ │ • queryCapabilities() - 查询解码器能力 │ │ │
│ │ │ • createDecoder() - 创建解码器实例 │ │ │
│ │ │ • decode() - 解码WMA数据 │ │ │
│ │ │ • getInfo() - 获取解码信息 │ │ │
│ │ │ • destroyDecoder() - 销毁解码器实例 │ │ │
│ │ └─────────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ NDK 接口层 │ │
│ │ ┌─────────────────────────────────────────────────────┐ │ │
│ │ │ oh_wma_decoder.cpp │ │ │
│ │ │ • OHWmaDecoder_Create() - 创建解码器 │ │ │
│ │ │ • OHWmaDecoder_Init() - 初始化解码器 │ │ │
│ │ │ • OHWmaDecoder_Decode() - 解码数据 │ │ │
│ │ │ • OHWmaDecoder_GetInfo() - 获取信息 │ │ │
│ │ │ • OHWmaDecoder_Destroy() - 销毁解码器 │ │ │
│ │ └─────────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 核心解码层 │ │
│ │ ┌─────────────────────────────────────────────────────┐ │ │
│ │ │ wma_decoder_c.c │ │ │
│ │ │ • wma_decoder_create() - 创建解码器上下文 │ │ │
│ │ │ • wma_decoder_init() - 初始化解码器 │ │ │
│ │ │ • wma_decoder_decode() - 执行WMA解码 │ │ │
│ │ │ • wma_decoder_get_info() - 获取解码信息 │ │ │
│ │ │ • wma_decoder_destroy() - 销毁解码器 │ │ │
│ │ └─────────────────────────────────────────────────────┘ │ │
│ │ ┌─────────────────────────────────────────────────────┐ │ │
│ │ │ pcm_processor_c.c │ │ │
│ │ │ • PCM缓冲区管理 │ │ │
│ │ │ • 音频格式转换 │ │ │
│ │ │ • 重采样处理 │ │ │
│ │ └─────────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 第三方库层 │ │
│ │ ┌─────────────────┐ ┌─────────────────┐ ┌──────────┐ │ │
│ │ │ libavcodec │ │ libavutil │ │libswresample│ │ │
│ │ │ (WMA解码) │ │ (工具函数) │ │ (重采样) │ │ │
│ │ └─────────────────┘ └─────────────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
技术栈
- 平台: OpenHarmony 5.0+ (API 15)
- 开发语言: C/C++ (NDK层) + ArkTS (应用层)
- 核心解码库: FFmpeg 6.1 (libavcodec)
- 音频框架: OHAudio
- 接口桥接: NAPI
- 构建工具: OpenHarmony NDK + CMake
- 链接方式: 静态链接
静态链接优势
- 避免动态加载问题: 所有代码直接编译进应用
- 更好的性能: 静态链接减少运行时开销
- 更简单的部署: 单一可执行文件,减少依赖管理
- 编译时错误检查: 在编译时就能发现错误
- 无运行时依赖: 不依赖外部模块加载
🚀 开发路线
阶段一:基础架构搭建 ✅
- FFmpeg交叉编译 (OpenHarmony aarch64)
- 核心解码器实现 (C语言)
- NDK接口层设计
- NAPI桥接层实现
- 静态链接方案实施
阶段二:应用集成 ✅
- OpenHarmony应用创建
- ArkTS界面开发
- 模拟数据生成
- 功能测试验证
阶段三:真机验证 🔄
- 真机部署测试
- WMA文件解码验证
- 音频播放集成
- 性能优化
阶段四:完善优化 📋
- 完整错误处理
- 性能基准测试
- 文档完善
- 示例应用
📊 当前进展
✅ 已完成工作
1. FFmpeg交叉编译
- ✅ 成功交叉编译FFmpeg 6.1 for OpenHarmony aarch64
- ✅ 包含libavcodec、libavutil、libswresample
- ✅ 支持WMA V1/V2/PRO格式解码
2. C语言核心解码器
- ✅ 核心解码器:
wma_decoder_c.c
(8,718 字节) - ✅ PCM处理器:
pcm_processor_c.c
- ✅ 完整的WMA解码逻辑实现
3. NDK接口层
- ✅ NDK接口:
oh_wma_decoder.cpp
(15,436 字节) - ✅ C++包装器,提供C风格API
- ✅ 完整的错误处理和资源管理
4. NAPI桥接层
- ✅ NAPI桥接:
napi_wrapper_c.c
(18,496 字节) - ✅ 模块注册为
@ohos/wma-decoder
- ✅ 完整的函数导出和类型转换
5. 静态链接方案
- ✅ 修改CMakeLists.txt,直接编译所有源码
- ✅ 正确链接FFmpeg静态库
- ✅ 避免动态模块加载问题
- ✅ 所有代码编译进应用,无外部依赖
6. OpenHarmony应用集成
- ✅ 应用编译成功
- ✅ ArkTS代码编译成功
- ✅ UI界面正常工作
- ✅ 模拟模块提供完整功能测试
📈 编译统计
- 总编译时间: ~39秒
- ArkTS编译: ✅ 成功
- C/C++编译: ✅ 成功
- 链接: ✅ 成功
- 应用启动: ✅ 成功
🎵 运行效果
应用界面
- ✅ 应用正常启动
- ✅ 按钮交互正常
- ✅ 日志输出详细
- ✅ 测试结果显示
模拟解码器功能
- ✅ 生成真实的PCM音频数据(440Hz正弦波)
- ✅ 支持44.1kHz, 2声道, 16位音频格式
- ✅ 完整的解码器接口实现
- ✅ 错误处理和资源管理
运行日志示例
css
🔧 静态链接已完成,使用模拟模块进行测试
📋 真实NAPI模块已编译进应用,等待运行时支持
解码器能力: {
"supportedFormats": 7,
"maxSampleRate": 48000,
"minSampleRate": 8000,
"maxChannels": 8,
"maxBitDepth": 32,
"minBitDepth": 8
}
解码器初始化成功,ID: 1
WMA解码器初始化成功,配置: {"sampleRate":44100,"channels":2,"bitDepth":16,"format":2}
解码成功: 1024字节, 44100Hz
🛠️ 运行条件
开发环境要求
- 操作系统: macOS 12.0+ / Ubuntu 20.04+ / Windows 10+
- OpenHarmony SDK: 15.0+
- DevEco Studio: 4.0+
- NDK工具链: OpenHarmony NDK 15.0+
- 内存: 8GB+
- 存储: 10GB+ 可用空间
运行环境要求
- 设备: 支持OpenHarmony 5.0+的设备
- 架构: ARM64 (aarch64)
- 内存: 2GB+
- 存储: 1GB+ 可用空间
💻 各平台配置要点
🍎 macOS 配置要点(强烈建议使用mac)
1. 环境变量配置
bash
# 设置OpenHarmony NDK路径(根据实际安装位置调整)
export OHOS_NDK_HOME=/Users/你的用户名/Library/OpenHarmony/Sdk
# 验证环境变量
echo $OHOS_NDK_HOME
2. 工具链检查
bash
# 检查clang编译器
ls $OHOS_NDK_HOME/15/native/llvm/bin/clang
# 检查工具链完整性
ls $OHOS_NDK_HOME/15/native/llvm/bin/
3. 常见问题
- 权限问题: 确保DevEco Studio有足够权限访问SDK目录
- 路径问题: macOS路径区分大小写,注意路径准确性
- 工具缺失 : 如果缺少wget,使用
brew install wget
或修改脚本使用curl
🐧 Ubuntu/Linux 配置要点
1. 依赖安装
bash
# 安装必要工具
sudo apt update
sudo apt install build-essential cmake git wget curl
# 安装Java环境(DevEco Studio需要)
sudo apt install openjdk-11-jdk
2. 环境变量配置
bash
# 添加到 ~/.bashrc 或 ~/.zshrc
export OHOS_NDK_HOME=/opt/openharmony/sdk
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
# 重新加载配置
source ~/.bashrc
3. 权限设置
bash
# 确保SDK目录有执行权限
chmod +x $OHOS_NDK_HOME/15/native/llvm/bin/*
🪟 Windows 配置要点
1. 环境变量设置
cmd
# 在系统环境变量中添加
OHOS_NDK_HOME=C:\Users\你的用户名\AppData\Local\OpenHarmony\Sdk
JAVA_HOME=C:\Program Files\Java\jdk-11
# 添加到PATH
%OHOS_NDK_HOME%\15\native\llvm\bin
2. 工具链配置
- 使用Windows版本的OpenHarmony NDK
- 确保使用正确的路径分隔符(反斜杠)
- 在PowerShell或CMD中验证环境变量
3. 常见问题
- 路径长度: Windows路径长度限制,避免过深的目录结构
- 权限问题: 以管理员身份运行DevEco Studio
- 防火墙: 确保构建脚本可以访问网络
🔧 通用配置检查
1. 环境验证脚本
bash
#!/bin/bash
echo "=== OpenHarmony环境检查 ==="
# 检查环境变量
if [ -z "$OHOS_NDK_HOME" ]; then
echo "❌ OHOS_NDK_HOME未设置"
exit 1
else
echo "✅ OHOS_NDK_HOME: $OHOS_NDK_HOME"
fi
# 检查SDK目录
if [ ! -d "$OHOS_NDK_HOME" ]; then
echo "❌ SDK目录不存在: $OHOS_NDK_HOME"
exit 1
else
echo "✅ SDK目录存在"
fi
# 检查工具链
TOOLCHAIN="$OHOS_NDK_HOME/15/native/llvm/bin"
if [ ! -f "$TOOLCHAIN/clang" ]; then
echo "❌ clang编译器不存在"
exit 1
else
echo "✅ clang编译器存在"
fi
if [ ! -f "$TOOLCHAIN/clang++" ]; then
echo "❌ clang++编译器不存在"
exit 1
else
echo "✅ clang++编译器存在"
fi
echo "✅ 环境检查通过"
2. 构建前检查清单
- OpenHarmony SDK已正确安装
- 环境变量已正确设置
- 工具链文件存在且可执行
- 网络连接正常(用于下载FFmpeg)
- 磁盘空间充足(至少10GB)
- 权限设置正确
3. 故障排除
bash
# 如果构建失败,检查以下内容:
# 1. 使用一键启动脚本检查环境
./start.sh check
# 2. 清理构建缓存
./start.sh clean
# 3. 重新设置环境变量
export OHOS_NDK_HOME=/path/to/your/sdk
# 4. 验证工具链
$OHOS_NDK_HOME/15/native/llvm/bin/clang --version
# 5. 检查FFmpeg库
ls hmaudiodecoder/third_party/ffmpeg/lib/
# 6. 分步构建(如果一键构建失败)
./start.sh ffmpeg # 先构建FFmpeg
./start.sh core # 再构建核心解码器
./start.sh app # 最后构建应用
🚀 运行说明
🎯 一键启动(推荐)
bash
# 设置环境变量
export OHOS_NDK_HOME=/path/to/OpenHarmony/Sdk
# 一键完成所有构建和运行
./start.sh
一键启动脚本功能:
- ✅ 自动检查环境和项目结构
- ✅ 构建FFmpeg库(智能跳过已构建)
- ✅ 构建核心解码器和NDK接口
- ✅ 构建OpenHarmony应用
- ✅ 提供运行指导
脚本选项:
bash
./start.sh # 完整构建流程
./start.sh cleanall # 清理所有缓存和临时文件(推荐在构建前使用)
./start.sh ffmpeg # 仅构建FFmpeg库
./start.sh core # 仅构建核心解码器
./start.sh app # 仅构建应用
./start.sh check # 仅检查环境
./start.sh clean # 清理构建文件
./start.sh help # 显示帮助








🔧 手动构建(可选)
1. 环境配置
macOS/Linux:
bash
# 设置OpenHarmony NDK环境变量
export OHOS_NDK_HOME=/path/to/OpenHarmony/Sdk
# 验证环境
echo $OHOS_NDK_HOME
Windows:
cmd
# 设置环境变量(在系统设置中或命令行中)
set OHOS_NDK_HOME=C:\path\to\OpenHarmony\Sdk
# 验证环境
echo %OHOS_NDK_HOME%
2. 项目构建
bash
# 进入项目目录
cd hmaudiodecoder
# 构建FFmpeg库(首次运行)
./shell/build_ffmpeg.sh
# 构建所有组件(核心解码器、NDK接口、NAPI桥接)
./shell/build_c_version.sh
3. 应用运行
bash
# 使用DevEco Studio打开项目
# 或者使用命令行构建
hvigor build
# 在模拟器中运行
# 或部署到真机设备
less
08-30 02:43:56.629 54945-709429 A00000/testTag I Ability onCreate
08-30 02:43:56.636 54945-709429 A00000/testTag I Ability onWindowStageCreate
08-30 02:43:56.638 54945-709429 A00000/testTag I Ability onForeground
08-30 02:43:56.884 54945-709429 A00000/testTag I Succeeded in loading the content.
08-30 02:43:56.919 54945-709429 A03d00/JSAPP I 🔧 静态链接已完成,使用模拟模块进行测试
08-30 02:43:56.919 54945-709429 A03d00/JSAPP I 📋 真实NAPI模块已编译进应用,等待运行时支持
08-30 02:43:56.923 54945-709429 A03d00/JSAPP I 解码器能力: {
08-30 02:43:56.923 54945-709429 A03d00/JSAPP I "supportedFormats": 7,
08-30 02:43:56.923 54945-709429 A03d00/JSAPP I "maxSampleRate": 48000,
08-30 02:43:56.923 54945-709429 A03d00/JSAPP I "minSampleRate": 8000,
08-30 02:43:56.923 54945-709429 A03d00/JSAPP I "maxChannels": 8,
08-30 02:43:56.923 54945-709429 A03d00/JSAPP I "maxBitDepth": 32,
08-30 02:43:56.923 54945-709429 A03d00/JSAPP I "minBitDepth": 8
08-30 02:43:56.923 54945-709429 A03d00/JSAPP I }
08-30 02:43:56.923 54945-709429 A03d00/JSAPP I 解码器初始化成功,ID: 1
08-30 02:43:56.923 54945-709429 A00000/testTag I WMA解码器初始化成功,配置: {"sampleRate":44100,"channels":2,"bitDepth":16,"format":2}
08-30 02:44:00.235 54945-709429 A00000/testTag I 解码成功: 1024字节, 44100Hz
08-30 02:44:39.775 55201-710772 A00000/testTag I Ability onCreate
08-30 02:44:39.776 55201-710772 A00000/testTag I Ability onWindowStageCreate
08-30 02:44:39.777 55201-710772 A00000/testTag I Ability onForeground
08-30 02:44:39.847 55201-710772 A00000/testTag I Succeeded in loading the content.
08-30 02:44:39.877 55201-710772 A03d00/JSAPP I 🔧 静态链接已完成,使用模拟模块进行测试
08-30 02:44:39.877 55201-710772 A03d00/JSAPP I 📋 真实NAPI模块已编译进应用,等待运行时支持
08-30 02:44:39.878 55201-710772 A03d00/JSAPP I 解码器能力: {
08-30 02:44:39.878 55201-710772 A03d00/JSAPP I "supportedFormats": 7,
08-30 02:44:39.878 55201-710772 A03d00/JSAPP I "maxSampleRate": 48000,
08-30 02:44:39.878 55201-710772 A03d00/JSAPP I "minSampleRate": 8000,
08-30 02:44:39.878 55201-710772 A03d00/JSAPP I "maxChannels": 8,
08-30 02:44:39.878 55201-710772 A03d00/JSAPP I "maxBitDepth": 32,
08-30 02:44:39.878 55201-710772 A03d00/JSAPP I "minBitDepth": 8
08-30 02:44:39.878 55201-710772 A03d00/JSAPP I }
08-30 02:44:39.878 55201-710772 A03d00/JSAPP I 解码器初始化成功,ID: 1
08-30 02:44:39.878 55201-710772 A00000/testTag I WMA解码器初始化成功,配置: {"sampleRate":44100,"channels":2,"bitDepth":16,"format":2}
08-30 02:50:05.012 56903-719116 A00000/testTag I Ability onCreate
08-30 02:50:05.013 56903-719116 A00000/testTag I Ability onWindowStageCreate
08-30 02:50:05.014 56903-719116 A00000/testTag I Ability onForeground
08-30 02:50:05.097 56903-719116 A00000/testTag I Succeeded in loading the content.
08-30 02:50:05.101 56903-719116 A03d00/JSAPP I 🔧 静态链接已完成,使用模拟模块进行测试
08-30 02:50:05.101 56903-719116 A03d00/JSAPP I 📋 真实NAPI模块已编译进应用,等待运行时支持
08-30 02:50:05.102 56903-719116 A03d00/JSAPP I 解码器能力: {
08-30 02:50:05.102 56903-719116 A03d00/JSAPP I "supportedFormats": 7,
08-30 02:50:05.102 56903-719116 A03d00/JSAPP I "maxSampleRate": 48000,
08-30 02:50:05.102 56903-719116 A03d00/JSAPP I "minSampleRate": 8000,
08-30 02:50:05.102 56903-719116 A03d00/JSAPP I "maxChannels": 8,
08-30 02:50:05.102 56903-719116 A03d00/JSAPP I "maxBitDepth": 32,
08-30 02:50:05.102 56903-719116 A03d00/JSAPP I "minBitDepth": 8
08-30 02:50:05.102 56903-719116 A03d00/JSAPP I }
08-30 02:50:05.102 56903-719116 A03d00/JSAPP I 解码器初始化成功,ID: 1
08-30 02:50:05.102 56903-719116 A00000/testTag I WMA解码器初始化成功,配置: {"sampleRate":44100,"channels":2,"bitDepth":16,"format":2}
4. 构建说明
shell/build_c_version.sh
脚本会自动构建以下组件:
- 核心解码器: WMA解码器和PCM处理器
- NDK接口层: C++包装器,提供C风格API
- NAPI桥接层: NAPI包装器,连接ArkTS应用
- 静态库: 生成所有必要的静态库文件
5. 功能测试
- 启动应用
- 点击"测试解码器"按钮
- 查看解码器能力信息
- 验证音频数据生成
- 检查日志输出
🧪 测试说明
模拟器测试
- ✅ 功能测试: 解码器接口调用正常
- ✅ 数据测试: PCM数据生成正确
- ✅ 格式测试: 支持多种音频格式
- ✅ 错误处理: 异常情况处理正常
真机测试(待完成)
- 🔄 部署测试: 应用安装和启动
- 🔄 性能测试: 内存和CPU使用情况
- 🔄 兼容性测试: 不同设备适配
- 🔄 稳定性测试: 长时间运行测试
测试用例
-
解码器能力查询
- 输入: 无
- 输出: 支持的格式、采样率范围等
- 预期: 返回完整的能力信息
-
解码器初始化
- 输入: 音频配置参数
- 输出: 解码器实例ID
- 预期: 成功创建解码器实例
-
音频数据解码
- 输入: WMA音频数据
- 输出: PCM音频数据
- 预期: 正确解码并输出PCM数据
📋 待优化项
🔄 短期优化(1-2周)
-
真机验证
- 在真机上测试应用
- 验证NAPI函数调用
- 测试WMA文件解码功能
-
WMA文件测试
- 准备测试用的WMA文件(V1/V2/PRO格式)
- 验证解码功能
- 测试音频输出质量
📈 中期优化(1个月)
-
音频播放集成
- 集成OpenHarmony OHAudio框架
- 实现PCM数据实时播放
- 添加音频流控制(播放/暂停/停止)
-
性能优化
- 内存使用分析
- CPU占用测试
- 解码速度基准测试
🎯 长期优化(2-3个月)
-
完整功能
- 支持所有WMA格式
- 完整的错误处理
- 用户友好的界面
-
文档和示例
- API文档完善
- 使用示例
- 部署指南
📁 项目结构
bash
hm-audio-decoder/
├── start.sh # 一键启动脚本
├── hmaudiodecoder/ # 主项目目录
│ ├── src/ # 源代码
│ │ ├── decoder/ # 核心解码器
│ │ │ ├── wma_decoder_c.c # WMA解码器实现
│ │ │ ├── wma_decoder_c.h # 解码器头文件
│ │ │ ├── pcm_processor_c.c # PCM处理器
│ │ │ └── pcm_processor_c.h # PCM处理器头文件
│ │ ├── ndk/ # NDK接口层
│ │ │ ├── oh_wma_decoder.cpp # NDK接口实现
│ │ │ └── oh_wma_decoder.h # NDK接口头文件
│ │ └── napi/ # NAPI桥接层
│ │ └── napi_wrapper_c.c # NAPI包装器
│ ├── entry/ # OpenHarmony应用
│ │ ├── src/main/
│ │ │ ├── cpp/ # C++源码
│ │ │ └── ets/ # ArkTS源码
│ │ └── libs/ohos/aarch64/ # 编译产物(平台无关)
│ ├── third_party/ # 第三方库目录
│ │ ├── ffmpeg/ # 编译好的FFmpeg库文件
│ │ ├── ffmpeg-6.1/ # FFmpeg源码(构建时)
│ │ ├── build_ohos/ # FFmpeg构建目录(构建时)
│ │ └── install_ohos/ # FFmpeg安装目录(构建时)
│ ├── shell/ # 构建脚本(平台相关)
│ │ ├── build_ffmpeg.sh # FFmpeg交叉编译脚本
│ │ └── build_c_version.sh # C版本构建脚本
│ ├── build/ # 构建输出目录
│ │ ├── output/ # 构建产物
│ │ ├── build_core/ # 核心解码器构建
│ │ ├── build_ndk/ # NDK接口构建
│ │ └── build_napi/ # NAPI桥接构建
│ ├── docs/ # 文档
│ └── samples/ # 示例应用
├── 运行效果/ # 运行截图和日志
├── 赛事相关说明/ # 竞赛文档
└── 文档总入口.md # 文档导航
📋 平台相关文件说明
🔧 构建脚本(需要根据平台调整)
shell/build_ffmpeg.sh
- FFmpeg交叉编译脚本shell/build_c_version.sh
- C版本构建脚本- 这些脚本中的路径分隔符和命令可能需要根据平台调整
📦 编译产物(平台无关)
entry/libs/ohos/aarch64/
- 所有编译产物都是ARM64架构- 这些文件可以在任何支持OpenHarmony的设备上运行
🛠️ 开发工具(平台相关)
- macOS: 使用bash脚本,路径使用正斜杠
- Windows: 需要PowerShell或WSL,路径使用反斜杠
- Linux: 使用bash脚本,路径使用正斜杠
技术贡献
- FFmpeg项目 - 提供WMA解码核心库
- OpenHarmony项目 - 提供平台和开发工具
- DevEco Studio团队 - 提供开发环境
- DeepSeek - 提供开发技术路线指引
📄 许可证
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
🏆 竞赛信息
- 竞赛名称: OpenHarmony多媒体编解码竞赛
- 竞赛官网 : gitee.com/openharmony...
- 参赛作品: WMA音频解码器
- 技术栈: OpenHarmony + FFmpeg + NDK + NAPI
- 项目状态: 基础架构完成,功能测试通过
项目版本 : v1.0
最后更新 : 2025年08月30日
维护者 : hfqf123@126.com
项目: OpenHarmony WMA音频解码器