vgs_test_suites/trae/design.md
2025-11-07 11:37:09 +08:00

4.8 KiB
Raw Blame History

UI 指导文档WebCodecs AVC/HEVC 判定单页

本页旨在用 React + TailwindCSS + shadcn/ui + TypeScript + Vite 实现“当前页面是否支持 WebCodecs 的 AVC 与 HEVC”的判定与展示。仅做能力判定与结果呈现不进行视频解码、上传、登录等额外功能。

1. 目标与范围

  • 目标:清晰、可靠地展示浏览器对 WebCodecs、AVC(H.264) 与 HEVC(H.265) 的支持状态。
  • 范围:
    • 首屏自动判定,并支持手动“重新检测”。
    • 展示支持、非支持、未知三种状态,并提供详细信息(环境、判定过程、错误)。
    • 仅单页应用,无路由与多页结构。
  • 非目标:
    • 不做实际视频解码/播放。
    • 不做账号、权限、国际化切换等。

2. 信息架构与布局

  • 顶部:标题与简述
    • 标题WebCodecs 编码能力判定
    • 说明:展示当前环境对 WebCodecs、AVC 与 HEVC 的支持情况
  • 核心卡片DetectorCard
    • 总览状态行:
      • WebCodecs可用/不可用
      • AVC(H.264):支持/不支持/未知
      • HEVC(H.265):支持/不支持/未知(重点关注)
    • 操作区:
      • 按钮重新检测Button
      • 按钮复制检测详情Button可选
    • 详情折叠区(可展开):
      • 环境信息UA、isSecureContext、平台信息
      • 判定细节:各 VideoDecoder.isConfigSupported 的输入与返回
      • 错误信息:异常堆栈、失败原因
  • 底部:
    • 兼容性声明与提示链接(例如参考文档)

3. 组件清单与样式shadcn/ui + Tailwind

  • Card<Card> <CardHeader> <CardTitle> <CardContent> 用于包裹判定结果
  • Badge用于标识状态
    • 成功(支持):绿色 bg-emerald-500 / shadcn variant="default" + text-white
    • 失败(不支持):红色 bg-red-500 / variant="destructive"
    • 未知:琥珀色或灰色 bg-amber-500/bg-gray-500
  • Button主要重新检测、次要复制详情
  • Separator分隔信息块
  • Collapsible / Accordion用于展开判定详情
  • Alert可选在 WebCodecs 不可用或非安全上下文时提示

Tailwind 约定:

  • 容器宽度:max-w-2xl mx-auto px-4;移动优先布局。
  • 字体与层级:标题 text-xl font-semibold,正文 text-sm text-muted-foreground
  • 状态色统一:支持=绿色、失败=红色、未知=琥珀/灰。

4. 状态与数据流

  • 数据源:utils/codecs 封装的检测函数Promise
  • 类型(页面侧以只读消费):
    • CodecStatus = 'supported' | 'unsupported' | 'unknown'
    • CodecSupport
      • webCodecs: boolean
      • avc: CodecStatus
      • hevc: CodecStatus
      • details: { env, checks, errors, timestamp }
  • 生命周期:
    • 初次渲染显示加载状态Skeleton/Spinner完成后渲染结果。
    • 重新检测:刷新整个检测流程并更新时间戳。
  • 错误:捕获并在详情区展示,页面用 Alert 简述。

5. 交互流程(主要场景)

  1. 首屏加载:
    • 调用 detectAll() -> 返回 CodecSupport
    • 显示三行状态WebCodecs/AVC/HEVC与详情入口
  2. 用户点击“重新检测”:
    • 再次调用 detectAll(),展示加载与最新结果
  3. 用户点击“复制检测详情”(可选):
    • details 序列化为 JSON 并复制至剪贴板

6. 响应式与可访问性

  • 响应式:
    • 移动端:单列卡片;按钮占满或并排但保持可点击区域
    • 桌面端:保持居中与合理留白
  • 可访问性:
    • 所有交互元素有可见焦点态Tailwind focus 样式)
    • 状态色同时提供文本标签(如“支持/不支持/未知”),避免仅靠颜色传达
    • 按钮加上 aria-label

7. 文案与视觉规则

  • 标题:WebCodecs 编码能力判定
  • 说明:简述仅判定能力,不做解码测试
  • 状态行文案:
    • WebCodecs可用/不可用
    • AVC(H.264)支持/不支持/未知
    • HEVC(H.265)支持/不支持/未知
  • 详情区:
    • 环境信息UA、安全上下文、平台
    • 判定过程:每次 isConfigSupported 的输入与输出
    • 错误:异常消息与堆栈(裁剪)

8. 错误与边界情况提示

  • 非安全上下文(!isSecureContext):提示必须在 HTTPS 下使用 WebCodecs
  • 浏览器不支持 WebCodecs如部分 Firefox
    • 顶部 Alert 提示不支持 WebCodecs
    • AVC/HEVC 状态标为 未知
  • HEVC 平台依赖性强:不同系统/浏览器的结果可能不同;详情区给出判定依据

9. 组件映射到目录结构

  • 页面:src/App.tsx(单页)
  • 组件:src/components/DetectorCard.tsx(包含状态、操作与详情)
  • 工具:src/utils/codecs/*(判定逻辑与类型)

10. 未来扩展(暂不实现)

  • 导出检测报告 JSON
  • 增加更多编码VP9/AV1判定
  • 国际化与主题切换