4.2 KiB
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
- T0:XComponent 创建并取得回调传入的
OHNativeWindow,增加 NativeObject 引用。 - T1:专用渲染线程创建 EGLDisplay、RGBA8 EGLConfig、ES3 EGLContext 和 EGLWindowSurface,执行
eglMakeCurrent。 - T2:同一渲染线程创建 mpv OpenGL Render Context,注册 update callback。
- T3:
loadfile完成本地文件打开,MPV 软件解码产生可渲染帧。 - 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)的前置条件是实体机首帧、控制和压力矩阵完成。