视频能播,代理抓包却绕过了媒体流:HarmonyOS 7 enableMediaNetworkProxy 接入与回归

WebView 里的菜谱详情接口能被代理记录,视频也能正常播放,但媒体分片完全不在代理日志中。团队因此误判“所有请求都已纳入调试链路”,直到灰度环境才发现媒体域名使用了不同出口。

本文交付:一个 MediaProxyPolicy、媒体/普通请求对照测试、切换时序和回归表,帮助证明媒体流是否真正经过代理。。

两种行为不同的案例

案例一:开发环境抓包

仅在明确的调试构建和受控代理中开启媒体代理,记录分片 URL、状态码与播放结果。

案例二:企业网络出口

代理不可用时允许策略化回退,并向页面暴露“直连/代理/回退”状态,不能静默改变出口。

官方依据与版本边界

官方变更页:https://developer.huawei.com/consumer/cn/doc/doccenter-release-notes/js-apidiff-arkweb-7003

  1. ArkWeb 在 API 26 增加 enableMediaNetworkProxy。
  2. 媒体请求是否走代理需要显式配置。
  3. 普通 fetch 成功不能证明媒体流已走同一路径。
  4. 切换策略后需要重新验证播放与证书错误。

本文依据 HarmonyOS 7.0.0 Release(API 26)官方变更说明梳理接口,并对状态模型、分支选择和异常映射做了宿主侧 TypeScript 测试。当前本机 SDK 为 API 24,且没有连接 HDC 设备,因此不把示例描述为 API 26 编译通过、真机性能数据或上架审核结论。接入前请在 API 26 工程中按文末清单完成编译、设备与回归验证。

可复用的 ArkTS 集成片段

type ProxyMode = 'direct' | 'media-proxy' | 'fallback-direct'
+
+export class MediaProxyPolicy {
+  private mode: ProxyMode = 'direct'
+
+  async apply(controller: webview.WebviewController, enabled: boolean) {
+    try {
+      controller.enableMediaNetworkProxy(enabled)
+      this.mode = enabled ? 'media-proxy' : 'direct'
+    } catch (error) {
+      this.mode = 'fallback-direct'
+      hilog.error(0x1200, 'MediaProxy', 'apply failed: %{public}s', String((error as BusinessError).code))
+    }
+    AppStorage.setOrCreate('mediaProxyMode', this.mode)
+  }
+
+  getMode() { return this.mode }
+}
+
+// 对照请求:普通 JSON 与同域媒体分片都要出现在代理证据中
+const probes = ['/api/recipe/42', '/media/recipe-42/segment-001.m4s']

代码刻意把平台调用和业务状态分开:平台返回什么就记录什么,页面只消费稳定状态。接入时还应补齐项目的日志域、错误码类型和生命周期释放。

视频能播,代理抓包却绕过了媒体流:HarmonyOS 7 enableMediaNetworkProxy 接入与回归 的状态与证据路径

图中的每条箭头都应对应一条可查询日志:输入、平台调用、状态映射、UI 或降级结果。只有 UI 变化而没有中间证据,后续仍然难以区分接口失败和页面逻辑错误。

复现与验证

  1. 准备同域 JSON 接口和分片视频作为对照。
  2. 关闭媒体代理,分别记录普通请求与分片日志。
  3. 开启 enableMediaNetworkProxy 后重新加载页面。
  4. 核对代理日志、播放器错误、证书信息和当前 ProxyMode。
  5. 关闭代理再测一轮,确认配置可逆且无悬挂状态。
输入/场景预期分支验收信号
直连+普通请求可见建立基线
直连+媒体分片代理不可见符合基线
开启媒体代理两类均可见目标状态
代理不可达fallback-direct状态可解释
证书错误播放失败并记录不吞错
关闭媒体代理恢复直连策略可逆

取舍与落地清单

媒体代理适合调试和明确的网络策略,不应默认对所有用户打开。代理会改变链路、证书和性能特征,必须把模式、失败回退和关闭路径一起交付。

  • 已用 API 26 工程编译,并记录 SDK 与设备版本
  • 已覆盖“开发环境抓包”和“企业网络出口”两类行为
  • 已记录成功、失败、降级三条路径的输入与结果
  • 已核对监听、对象或任务的释放与幂等行为
  • 已把本文宿主测试替换为项目自己的真机证据

小结

一个 MediaProxyPolicy、媒体/普通请求对照测试、切换时序和回归表,帮助证明媒体流是否真正经过代理。。建议先在最小页面复现,再接入完整“中式美食”流程;先证明状态链正确,再谈动画、缓存或埋点优化。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐