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

B站影视 韩国电影 2025-09-07 20:51 2

摘要:本项目是参加OpenHarmony 多媒体编解码竞赛的参赛作品,旨在为 OpenHarmony 平台开发一个完整的 WMA 音频解码器,支持 WMA V1/V2/PRO 格式解码,提供 NDK 接口和 ArkTS 应用层。

本项目是参加 OpenHarmony 多媒体编解码竞赛 的参赛作品,旨在为 OpenHarmony 平台开发一个完整的 WMA 音频解码器,支持 WMA V1/V2/PRO 格式解码,提供 NDK 接口和 ArkTS 应用层。

目前仓库还是私有状态,待比赛结束后会开放出来,有兴趣的朋友可以先加个关注或私聊。

┌─────────────────────────────────────────────────────────────┐│ OpenHarmony 应用 ││ ┌─────────────────────────────────────────────────────────┐ ││ │ ArkTS 应用层 │ ││ │ ┌─────────────────┐ ┌─────────────────┐ ┌──────────┐ │ ││ │ │ 音频播放器 │ │ 文件管理器 │ │ 测试应用 │ │ ││ │ └─────────────────┘ └─────────────────┘ └──────────┘ │ ││ └─────────────────────────────────────────────────────────┘ ││ │ ││ ▼ ││ ┌─────────────────────────────────────────────────────────┐ ││ │ NAPI 函数 (内置) │ ││ │ ┌─────────────────────────────────────────────────────┐ │ ││ │ │ napi_wrapper_c.c │ │ ││ │ │ • queryCapabilities -│ │ │ • createdecoder -│ │ │ • decode -│ │ │ • 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_decoder_get_info -│ │ │ • wma_decoder_destroy -│ │ └─────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ │ │ pcm_processor_c.c │ │ │ │ │ │ • PCM 缓冲区管理 │ │ │ │ │ │ • 音频格式转换 │ │ │ │ │ │ • 重采样处理 │ │ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ 第三方库层 │ │ │ │ ┌─────────────────┐ ┌─────────────────┐ ┌──────────┐ │ │ │ │ │ libavcodec │ │ libavutil │ │libswresample│ │ │ │ │ │ (WMA 解码) │ │ (工具函数) │ │ (重采样) │ │ │ │ │ └─────────────────┘ └─────────────────┘ └──────────┘ │ │ │ └─────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘模拟解码器功能运行日志示例 静态链接已完成,使用模拟模块进行测试 真实NAPI模块已编译进应用,等待运行时支持解码器能力: { "supportedFormats": 7, "maxSampleRate": 48000, "minSampleRate": 8000, "maxChannels": 8, "maxBitDepth": 32, "minBitDepth": 8}解码器初始化成功,ID: 1WMA解码器初始化成功,配置: {"sampleRate":44100,"channels":2,"bitDepth":16,"format":2}解码成功: 1024字节, 44100Hzexport OHOS_NDK_HOME=/Users/你的用户名/Library/OpenHarmony/Sdkecho $OHOS_NDK_HOMEls $OHOS_NDK_HOME/15/native/llvm/bin/clangls $OHOS_NDK_HOME/15/native/llvm/bin/sudo apt updatesudo apt install build-essential cmake git wget curlsudo apt install openjdk-11-jdkexport OHOS_NDK_HOME=/opt/openharmony/sdkexport JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64source ~/.bashrc#!/bin/bashecho "=== OpenHarmony环境检查 ==="if [ -z "$OHOS_NDK_HOME" ]; then echo "❌ OHOS_NDK_HOME 未设置" exit 1 else echo "✅ OHOS_NDK_HOME: $OHOS_NDK_HOME" fiif [ ! -d "$OHOS_NDK_HOME" ]; then echo "❌ SDK 目录不存在: $OHOS_NDK_HOME" exit 1 else echo "✅ SDK 目录存在" fiTOOLCHAIN="$OHOS_NDK_HOME/15/native/llvm/bin" if [ ! -f "$TOOLCHAIN/clang" ]; then echo "❌ clang 编译器不存在" exit 1 else echo "✅ clang 编译器存在" fiif [ ! -f "$TOOLCHAIN/clang++" ]; then echo "❌ clang++编译器不存在" exit 1 else echo "✅ clang++编译器存在" fiecho "✅ 环境检查通过"./start.sh check./start.sh cleanexport OHOS_NDK_HOME=/path/to/your/sdk$OHOS_NDK_HOME/15/native/llvm/bin/clang --versionls hmaudiodecoder/third_party/ffmpeg/lib/./start.sh ffmpeg ./start.sh core ./start.sh appexport OHOS_NDK_HOME=/path/to/OpenHarmony/Sdk./start.sh

脚本选项

./start.sh./start.sh cleanall./start.sh ffmpeg./start.sh core./start.sh app./start.sh check./start.sh clean./start.sh helpexport OHOS_NDK_HOME=/path/to/OpenHarmony/Sdkecho $OHOS_NDK_HOMEcd hmaudiodecoder./shell/build_ffmpeg.sh./shell/build_c_version.shhvigor build08-30 02:43:56.629 54945-709429 A00000/testTag I Ability onCreate08-30 02:43:56.636 54945-709429 A00000/testTag I Ability onWindowStageCreate08-30 02:43:56.638 54945-709429 A00000/testTag I Ability onForeground08-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": 808-30 02:43:56.923 54945-709429 A03d00/JSAPP I }08-30 02:43:56.923 54945-709429 A03d00/JSAPP I 解码器初始化成功,ID: 108-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字节, 44100Hz08-30 02:44:39.775 55201-710772 A00000/testTag I Ability onCreate08-30 02:44:39.776 55201-710772 A00000/testTag I Ability onWindowStageCreate08-30 02:44:39.777 55201-710772 A00000/testTag I Ability onForeground08-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": 808-30 02:44:39.878 55201-710772 A03d00/JSAPP I }08-30 02:44:39.878 55201-710772 A03d00/JSAPP I 解码器初始化成功,ID: 108-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 onCreate08-30 02:50:05.013 56903-719116 A00000/testTag I Ability onWindowStageCreate08-30 02:50:05.014 56903-719116 A00000/testTag I Ability onForeground08-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": 808-30 02:50:05.102 56903-719116 A03d00/JSAPP I }08-30 02:50:05.102 56903-719116 A03d00/JSAPP I 解码器初始化成功,ID: 108-30 02:50:05.102 56903-719116 A00000/testTag I WMA解码器初始化成功,配置: {"sampleRate":44100,"channels":2,"bitDepth":16,"format":2}

shell/build_c_version.sh 脚本会自动构建以下组件:

hm-audio-decoder/├── start.sh├── hmaudiodecoder/│ ├── src/│ │ ├── decoder/│ │ │ ├── wma_decoder_c.c│ │ │ ├── wma_decoder_c.h│ │ │ ├── pcm_processor_c.c│ │ │ └── pcm_processor_c.h│ │ ├── ndk/│ │ │ ├── oh_wma_decoder.cpp│ │ │ └── oh_wma_decoder.h│ │ └── napi/│ │ └── napi_wrapper_c.c│ ├── entry/│ │ ├── src/main/│ │ │ ├── cpp/│ │ │ └── ets/│ │ └── libs/ohos/aarch64/│ ├── third_party/│ │ ├── ffmpeg/│ │ ├── ffmpeg-6.1/│ │ ├── build_ohos/│ │ └── install_ohos/│ ├── shell/│ │ ├── build_ffmpeg.sh│ │ └── build_c_version.sh│ ├── build/│ │ ├── output/│ │ ├── build_core/│ │ ├── build_ndk/│ │ └── build_napi/│ ├── docs/│ └── samples/├── 运行效果/├── 赛事相关说明/└── 文档总入口.md

来源:墨码行者

相关推荐