Files

4.3 KiB
Raw Permalink Blame History

Lessons

High

  • OHOS 同时定义 __OHOS__ 和 __linux__;必须显式平台检测,不能把全部 Linux API视为可用。
  • 最新 FFmpeg upstream 已有 OHCodec H.264/HEVC;研究当前源码后再决定 fork,避免重复维护。
  • libnet_ssl.so 主要提供证书验证接口,不是 FFmpeg TLS transport backend。
  • Clang 仅设置 sysroot 不会切换 target;macOS arm64 交叉编译必须在编译和链接两侧显式传 --target=aarch64-linux-ohos。

Medium

  • MPV upstream 使用 DOCS/;大小写不敏感文件系统不能可靠并存 docs/,沿用 upstream 目录。
  • 私有 Gitea 反向代理限制单次 HTTPS pack 时,可先推送历史基线 commit,再推增量分支;不得以浅克隆或裁剪历史规避限制。
  • Meson Cross File 的 @GLOBAL_SOURCE_ROOT@ 随被构建项目变化;共享工具路径应以 @DIRNAME@ 相对 Cross File 定位。
  • FreeType zlib=external 表示 fallback subproject;使用 SDK zlib 必须选择 zlib=system 并隔离 pkg-config。
  • XComponent Surface 回调的 surface 已是 OHNativeWindow*,应直接转换并 NativeObjectReference;再次调用 CreateNativeWindow 会在模拟器触发 SIGSEGV。
  • hdc file send 语法为 file send -b <bundle> <local> <remote>;应用沙箱媒体必须发送到 /data/storage/el2/base/haps/entry/files/。
  • libmpv 诊断计数返回 ArkTS Number;返回 BigInt 会导致 Inspector 无法序列化组件状态。
  • MPV 事件线程需高频轮询;200ms 轮询会使属性/命令事件堆积,seek 报 MPV_ERROR_EVENT_QUEUE_FULL。
  • MPV audio 是 aid 别名(音轨选择),不能传布尔 yes/no;Playback Lab 音频开关必须使用 aid=auto/no。
  • OHAudio seek/reset 先 Stop 再 Flush,并等待 inflight callback;只 Flush 后重新 Start 在模拟器返回 AUDIOSTREAM_ERROR_ILLEGAL_STATE。
  • OHAudio timestamp 在 Flush 后可能保留旧 epoch;统计需保存 raw frame origin,否则会出现 playedFrames > submittedFrames。
  • setup-ohos-env.sh 在 zsh 中的循环变量 path 会覆盖特殊 PATH 数组;运行脚本应使用 /bin/sh 或避免 source 到交互 zsh。
  • FFmpeg upstream OHCodec API24 路径是 surface-first:AV_PIX_FMT_OHCODEC 的 hwcontext 只保存 OHNativeWindow*,decoder 硬件帧通过 surface 输出;NativeBuffer/EGL API 存在不等于 MPV 可合法导入的非 surface 帧。
  • OHCodec capability 必须通过 OH_AVCodec_GetCapabilityByCategory 及 OH_AVCapability_* 查询;不能把 SDK 头文件存在误写成设备能力或硬件帧已产出。
  • Gitea 反向代理对完整 FFmpeg pack 返回 413;保留完整历史的可行做法是先建立空远端,再按 first-parent checkpoint 分块推送,不能浅克隆或裁剪历史。
  • MPV 消费独立 FFmpeg prefix 时,pkg-config 必须把 fork 的 lib/pkgconfig 置于 base prefix 前,并保留绝对 include/lib 路径;仅改 PREFIX 会丢失 libass/libplacebo 等其他依赖。
  • 当前 DevEco ArkUI SDK 下给既有平面 Column 外包 Scroll 会改变可见布局并裁掉后续控件;诊断页保持平面 Column,关键错误信息放在顶部,长列表改动需单独验收。
  • 渲染 update 不能完全依赖 callback:部分重复 load 会话可能漏通知;事件驱动应保留低频(250ms)安全探测,否则会卡在 BUFFERING。
  • 短媒体自动化 seek 若先等待首帧再执行多次 hdc keyEvent,媒体可能已 EOF;用立即触发的原生相对 seek 或更长受控 fixture,且保留真实命令错误。
  • /proc 在模拟器不一定提供 PSS、精确 heap 或可校准 CPU tick;benchmark 必须输出 null/原始 jiffies,不能自行推断 permille。
  • ArkTS UI:@Prop 不接受函数类型,交互回调应改用 @Link 状态或组件内路由;Stack 不支持 justifyContent,需使用 alignContent。
  • HarmonyOS UI:系统资源必须使用已存在的 $r('sys.color...') / $r('sys.symbol...') 名称;无效资源名会在 CompileArkTS 直接失败。图片缓存只保留 URL 状态/metadata,feed/details 轻量 JSON 可放 Preferences,不能把图片字节写入偏好存储。
  • setup-ohos-env.sh 被 zsh source 后可能剥离系统 PATH;跨脚本调用系统工具时使用绝对路径或 POSIX shell,不能假设 dirname/cp/stat 仍可查找。