开源项目:OpenHarmony WMA音频解码器

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
  • 链接方式: 静态链接

静态链接优势

  1. 避免动态加载问题: 所有代码直接编译进应用
  2. 更好的性能: 静态链接减少运行时开销
  3. 更简单的部署: 单一可执行文件,减少依赖管理
  4. 编译时错误检查: 在编译时就能发现错误
  5. 无运行时依赖: 不依赖外部模块加载

🚀 开发路线

阶段一:基础架构搭建 ✅

  • 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. 功能测试

  1. 启动应用
  2. 点击"测试解码器"按钮
  3. 查看解码器能力信息
  4. 验证音频数据生成
  5. 检查日志输出

🧪 测试说明

模拟器测试

  • 功能测试: 解码器接口调用正常
  • 数据测试: PCM数据生成正确
  • 格式测试: 支持多种音频格式
  • 错误处理: 异常情况处理正常

真机测试(待完成)

  • 🔄 部署测试: 应用安装和启动
  • 🔄 性能测试: 内存和CPU使用情况
  • 🔄 兼容性测试: 不同设备适配
  • 🔄 稳定性测试: 长时间运行测试

测试用例

  1. 解码器能力查询

    • 输入: 无
    • 输出: 支持的格式、采样率范围等
    • 预期: 返回完整的能力信息
  2. 解码器初始化

    • 输入: 音频配置参数
    • 输出: 解码器实例ID
    • 预期: 成功创建解码器实例
  3. 音频数据解码

    • 输入: WMA音频数据
    • 输出: PCM音频数据
    • 预期: 正确解码并输出PCM数据

📋 待优化项

🔄 短期优化(1-2周)

  1. 真机验证

    • 在真机上测试应用
    • 验证NAPI函数调用
    • 测试WMA文件解码功能
  2. WMA文件测试

    • 准备测试用的WMA文件(V1/V2/PRO格式)
    • 验证解码功能
    • 测试音频输出质量

📈 中期优化(1个月)

  1. 音频播放集成

    • 集成OpenHarmony OHAudio框架
    • 实现PCM数据实时播放
    • 添加音频流控制(播放/暂停/停止)
  2. 性能优化

    • 内存使用分析
    • CPU占用测试
    • 解码速度基准测试

🎯 长期优化(2-3个月)

  1. 完整功能

    • 支持所有WMA格式
    • 完整的错误处理
    • 用户友好的界面
  2. 文档和示例

    • 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音频解码器

相关推荐
bdawn1 天前
深入解析HarmonyOS:UIAbility与Page的生命周期协同
华为·生命周期·harmonyos·page·uiability·oncreate·ondidbuild
李姆斯1 天前
数据与直播画面“神同步”——SEI(补充增强信息)
前端·webrtc·音视频开发
安卓开发者1 天前
鸿蒙NEXT布局全解析:从线性到瀑布流,构建自适应UI界面
ui·华为·harmonyos
小星7401 天前
鸿蒙服务端开发资料汇总
华为·wpf·harmonyos
在下历飞雨1 天前
为啥选了Kuikly?2025“液态玻璃时代“六大跨端框架横向对比
android·harmonyos
技术猿188702783511 天前
华为 HarmonyOS 代表未来
华为·harmonyos
Jackson_Li1 天前
图片/视频操作一条龙(1):图片的获取,预览与压缩(鸿蒙开发)
harmonyos
森之鸟1 天前
开发中使用——鸿蒙CoreSpeechKit让文字发声
华为·harmonyos
leon_teacher2 天前
HarmonyOS权限管理应用
android·服务器·前端·javascript·华为·harmonyos