2025-11-12 14:49:07 +08:00

109 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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判定
- 国际化与主题切换