Files
Velix-MPV-Core/DOCS/PHASE2_PLAYBACK_REPORT.md

4.2 KiB
Raw Permalink Blame History

Phase 2 Playback Lab 报告

日期:2026-08-29 分支:harmony-port

范围

playback_lab/ 是独立 HarmonyOS 验证工程,仅链接 Phase 1 生成的 arm64 libmpv.so.2,不复用 Velix 主应用的页面或业务逻辑。当前只验证 GLES/EGL、软件解码和本地 MP4 首帧,不接入音频或硬解。

构建与产物

环境:DevEco Studio SDK API 24,HarmonyOS emulator 6.1.0.126,aarch64-linux-ohos。构建命令:

./scripts/stage-mpv.sh
DEVECO_SDK_HOME=/Applications/DevEco-Studio.app/Contents/sdk \
JAVA_HOME=/Applications/DevEco-Studio.app/Contents/jbr/Contents/Home \
PATH="$JAVA_HOME/bin:$PATH" \
/Applications/DevEco-Studio.app/Contents/tools/hvigor/bin/hvigorw \
  --no-daemon assembleHap --mode module -p product=default

结果:BUILD SUCCESSFUL。HAP:playback_lab/entry/build/default/outputs/default/entry-default-unsigned.hap,约 31 MiB,SHA-256 877568c34a02a4d61b8c4ed7721dd2e6486cb675cd1a58a8eaf44c9b00de05f5。包内包含 libentry.so、libmpv.so.2 和 libc++_shared.so;未提交 34 MiB 的 staged native 库。

构建仅保留两项预期警告:NAPI 动态模块在当前 SDK 尚未完成类型校验,以及调试 HAP 未配置正式签名;两者不影响本轮模拟器安装验证。

模拟器验证

目标:127.0.0.1:5555,虚拟设备进程配置为 Pura 90 Pro Max。

项目 结果 证据
HAP 安装、启动 通过 hdc install -r、aa start 成功
XComponent / OHNativeWindow 通过 页面显示 surface=READY;Native 回调无崩溃
EGLDisplay / EGLConfig / EGLContext / WindowSurface / makeCurrent 通过 页面显示 egl=READY;日志 EGL vendor=Express ... renderer=Mali-G77
libmpv 初始化与 Render API 通过 页面显示 mpv=READY;日志 libmpv initialized
本地 H.264 MP4 软件解码 通过 本地 sample.mp4 首帧及持续播放成功
Pause / Resume / Stop / Release 通过 UI 状态分别出现 PAUSED、PLAYING、STOPPED、RELEASED
Seek 通过 有效播放中 -10s/+10s 不报错;跳转按 duration 做边界裁剪
释放后重新进入 通过 RELEASED 后重新启动回到 PLAYER_CREATED,Surface/EGL/mpv 再次 READY
BigInt 状态序列化 通过 renderCount 改为 Number,Inspector 不再出现 BigInt 序列化错误

一次本地播放快照:position=2.00、duration=5.05、fps=29.97、dropped=0、firstFrameMs=622、renderCount=52。另一轮快照首帧为 117 ms;firstFrameMs 从 load() 调用开始计时,并在第一次 eglSwapBuffers 后记录。

First Frame Timeline

  1. T0:XComponent 创建并取得回调传入的 OHNativeWindow,增加 NativeObject 引用。
  2. T1:专用渲染线程创建 EGLDisplay、RGBA8 EGLConfig、ES3 EGLContext 和 EGLWindowSurface,执行 eglMakeCurrent。
  3. T2:同一渲染线程创建 mpv OpenGL Render Context,注册 update callback。
  4. T3:loadfile 完成本地文件打开,MPV 软件解码产生可渲染帧。
  5. T4:渲染线程执行 mpv_render_context_render、eglSwapBuffers,记录 firstFrameMs 和 renderCount。

尚未完成的真机验收

本轮只有模拟器,没有接入 HarmonyOS 实体手机,因此 Phase 2 不能标记为最终 COMPLETE。以下项目保持待验证:实体机 HAP 安装、实体机本地 1080P H.264/AAC、HTTP MP4、HTTPS MP4、HLS、20 次 Surface recreate、20 次进出、50 次 Play/Pause、50 次 Seek、横竖屏 20 次、30 分钟稳定性、CPU/RAM 曲线。

风险状态

风险 当前状态
RISK-01 POSIX / DNS / network runtime 未验证,网络链路留待实体机
RISK-02 XComponent / OHNativeWindow lifecycle 模拟器已验证;实体机压力测试待做
RISK-03 EGL context / Surface / plain-gl 模拟器已验证;旋转与重建待做
RISK-04 OHCodec buffer lifecycle 保持开放;Phase 2 明确禁用硬解
RISK-05 CA / HAP packaging 未签名调试 HAP 安装通过;正式签名待接入

新增 MPV upstream patch:0;未修改第三方源码。进入 Phase 3(ao_harmony + OHAudio)的前置条件是实体机首帧、控制和压力矩阵完成。