5.3 KiB
HarmonyOS First Native Build Report
Result
Phase 1 已在 DevEco Studio OpenHarmony SDK 6.1.1.125 / API 24 下生成真实 arm64 libmpv。本报告只证明编译、链接和静态检查,不声明真机运行语义已验证。
| 项目 | 结果 |
|---|---|
| Origin | https://git.leee.xin/leeexin/Velix-MPV-Core.git |
| origin/harmony-port | 以本次 Phase 1 提交推送后的 commit 为准 |
| MPV | 182fa6ca49f455cadb884858f386e2f00540aeb7 / 0.41.0-UNKNOWN |
| FFmpeg | 3acec0a1af2dda0a0838689b8b8649e7deb080a0 |
| libmpv | build/ohos-arm64/prefix/lib/libmpv.so.2.5.0 |
| Size | 34,314,184 bytes |
| SHA-256 | 80e4c6fda86d9822543615a97045fff3641e9125b23a4f736fb8511fe5a47790 |
| Architecture / ABI | ELF64, little-endian, AArch64, System V ABI, shared object, SONAME libmpv.so.2 |
| Toolchain | OHOS Clang/LLD 15.0.4, target aarch64-linux-ohos, musl sysroot |
| MPV / build files | 7:ao_harmony.c/.h、AO 注册、Meson feature、OHOS build script、依赖 allowlist;第三方依赖源码修改 0 |
| Build issues | 4,全部关闭 |
Features
MPV enabled:clone、ffmpeg、gl、glibc-thread-name、glob、glob-posix、gpl、harmony-audio、libass、libdl、libplacebo、linux-fstatfs、memrchr、ohos、posix、posix-shm、ppoll、pthread-condattr-setclock、vector、vt.h、zlib、libmpv shared、plain-gl。
FFmpeg enabled:软件解码、demux、network、HTTP/HTTPS/TCP/TLS、OpenSSL 3.6.4、SDK zlib、OHCodec H.264/HEVC decoder/encoder。FFmpeg GPL/version3/nonfree 均为 0。
Disabled:mpv CLI、tests、fuzzers、Lua/JavaScript、libcurl、桌面音视频后端、X11、Wayland、DRM/GBM、Cocoa、Windows backend、Android-specific backend、Vulkan、VAAPI、VDPAU、CUDA。libplacebo 的 Vulkan/OpenGL 自有 backend 关闭;MPV 自身 OpenGL Render API 保留。
Verification
- 最小 C/C++ 探针均为 OHOS AArch64 ELF;C++ 探针依赖 SDK
libc++_shared.so。 - prefix 内 13 个静态库的全部可见 archive object 均通过 AArch64 ELF 检查。
libmpv.so.2.5.0动态依赖为libc.so、libz.so、libnative_media_vdec.so、libnative_media_venc.so、libnative_media_codecbase.so、libnative_media_core.so、libnative_window.so、libohaudio.so;均来自 HarmonyOS SDK allowlist。- target metadata 未发现 Homebrew、
/usr/local、.dylib、Apple framework 或 Mach-O 污染。 - 已验证
mpv_create、mpv_initialize、mpv_command、mpv_set_property、mpv_get_property、mpv_render_context_create、mpv_render_context_render、mpv_render_context_set_update_callback、mpv_render_context_free。 scripts/build-all-ohos.sh已完成本次 Phase 3 全链路构建与最终校验(verified_archives=13)。
Warnings
剩余 18 条构建 warning:FFmpeg 5 条 upstream fallthrough/unused-function;FriBidi 5 条 enum-conversion;HarfBuzz 1 条仅开发者需要 Ragel;libass/MPV 4 条非阻塞 CMake compiler-state 探测;libplacebo 3 条无 graphics backend/name-prefix 提示。均不影响当前 target 产物,未通过关闭警告掩盖问题。
Dependency Graph
实际依赖图见 DOCS/PHASE1_DEPENDENCY_MATRIX.md。所有第三方库均静态进入 libmpv,SDK zlib、OHCodec 与 libc 保持系统动态依赖。
License
仓库与 libmpv 当前按 MPV GPL-2.0-or-later 路线管理。FFmpeg 为 LGPL 配置且未启用 GPL/nonfree;OpenSSL 为 Apache-2.0;静态 LGPL 组件仍需在正式发布时履行可重新链接、源码与 notices 义务。本文件不是最终发行 notice。
Phase 2 Risks
- POSIX、DNS、HTTP/HTTPS 与动态库加载目前仅 compile/link verified,尚未真机 runtime verified。
- XComponent / OHNativeWindow 生命周期、线程归属、窗口销毁与 EGL context loss 尚未验证。
- MPV plain-gl 与 HarmonyOS EGL/GLES 的实际格式、扩展、同步和首帧路径尚未联调。
- FFmpeg OHCodec 已编译,但 MPV hwdec 选择、surface/output buffer 生命周期及零拷贝均未验证。
- OpenSSL CA 路径与 HAP 内依赖打包、SDK系统库版本兼容仍需真机验证。
Phase 2 Entry Condition
已具备 XComponent + OHNativeWindow + EGL + libmpv OpenGL Render API 真机首帧测试的编译侧条件:SDK API 可用、libmpv 可链接、OpenGL Render API symbols 齐全。尚不代表首帧已经成功;Phase 2 必须在真机建立窗口和 EGL context 后验证。
FFmpeg-Harmony export prefix
Phase 4.5 的 FFmpeg fork 独立维护于
https://git.leee.xin/leeexin/Velix-FFmpeg-Harmony.git,分支
harmony-ohcodec-export,当前分支 tip f3a036c695(跨 origin 重定向丢弃敏感凭证;代码修正 commit
aacbe7d578)。MPV 不包含 FFmpeg
源码,也不读取其私有头文件;需要切换时执行:
./scripts/build-mpv-ohos-ffmpeg-harmony.sh
脚本默认消费 ../Velix-FFmpeg-Harmony/build/ohos-arm64/prefix,也可用
FFMPEG_PREFIX=/path/to/prefix MPV_BUILD_ROOT=/path/to/mpv-build MPV_PREFIX=/path/to/mpv-prefix 覆盖。切换脚本默认把 MPV 安装到
build/ohos-arm64/prefix-mpv-ffmpeg-harmony,避免覆盖默认 prefix。默认
build-mpv-ohos.sh 与 build-mpv-ohos-software.sh 的原有前缀和
harmony-ohcodec-gl=disabled 行为不变。本次切换构建已通过 AArch64 ELF、符号
和动态依赖校验,但没有进入 GPU mapper 或设备硬解验证。