feat: 上传时自动检测 HEVC 编码并转码为 1080p H.264 #1449

Merged
xiaoxia merged 6 commits from feat/hevc-auto-transcode into develop 2026-08-20 12:10:15 +08:00
Owner

问题

4K HEVC 素材在浏览器 WebCodecs 硬件解码时输出黑帧,flush 超时 10 秒。

方案

上传时检测 HEVC 编码,自动转码为 1080p H.264,前端零改动。

改动范围

仅 1 个文件: apps/worker/worker_app/tasks/ingest.py (+88 行)

逻辑

  1. metadata 提取后检测 codec 是否为 hevc/h265/hvh1
  2. HEVC → ffmpeg 转码 (H.264 CRF18, 1080p, yuv420p, faststart)
  3. 转码产物上传 OSS,storage_key 指向 _h264.mp4
  4. 重新提取转码后 metadata
  5. 非 HEVC 素材不处理,原样保留
  6. 转码失败降级使用原始文件,不阻塞上传

验收

  • H.264 上传 → 无转码,storage_key 不变
  • HEVC 上传 → 自动转码,storage_key 指向 _h264.mp4
  • 转码失败 → 降级原始文件,日志有 warning
## 问题 4K HEVC 素材在浏览器 WebCodecs 硬件解码时输出黑帧,flush 超时 10 秒。 ## 方案 上传时检测 HEVC 编码,自动转码为 1080p H.264,前端零改动。 ## 改动范围 **仅 1 个文件**: `apps/worker/worker_app/tasks/ingest.py` (+88 行) ## 逻辑 1. metadata 提取后检测 codec 是否为 hevc/h265/hvh1 2. HEVC → ffmpeg 转码 (H.264 CRF18, 1080p, yuv420p, faststart) 3. 转码产物上传 OSS,storage_key 指向 `_h264.mp4` 4. 重新提取转码后 metadata 5. 非 HEVC 素材不处理,原样保留 6. 转码失败降级使用原始文件,不阻塞上传 ## 验收 - H.264 上传 → 无转码,storage_key 不变 - HEVC 上传 → 自动转码,storage_key 指向 _h264.mp4 - 转码失败 → 降级原始文件,日志有 warning
xiaoxia added 1 commit 2026-08-20 10:50:26 +08:00
feat: 上传时自动检测 HEVC 编码并转码为 1080p H.264
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 55s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 28s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 29s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m39s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m52s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 2m30s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 2m51s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m44s
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
AI Code Review / AI Code Review (pull_request) Has been cancelled
773dafe5a8
解决 4K HEVC 素材在浏览器 WebCodecs 硬件解码时输出黑帧的问题。

改动范围:仅 ingest.py(+88 行)
- metadata 提取后检测 codec 是否为 hevc/h265/hvh1
- HEVC 素材自动转码:H.264 CRF18 + 1080p + yuv420p + faststart
- 转码产物上传 OSS,storage_key 指向 _h264.mp4
- 转码后重新提取 metadata(新 codec/size/分辨率)
- 非 HEVC 素材(H.264 等)不做任何处理
- 转码失败降级使用原始文件,不阻塞上传流程
- 超时 300s,临时文件 finally 清理

🚀 预览环境已部署

项目 详情
PR号 #1449
预览链接 https://pr-1449.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1449 | | 预览链接 | [https://pr-1449.preview.xiaoxiajianji.com](https://pr-1449.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot added 1 commit 2026-08-20 10:54:25 +08:00
style: auto-format with black + isort + prettier [skip ci-format-check]
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m43s
AI Code Review / AI Code Review (pull_request) Failing after 2m10s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 2m11s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m51s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 34s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 52s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 30s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 59s
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Lint (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
a5bc9a3ea6
auto-approve-bot approved these changes 2026-08-20 11:05:31 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-08-20 11:05:31 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
xiaoxia added 1 commit 2026-08-20 11:22:12 +08:00
fix: HEVC 转码后先提取元数据再更新 storage_key,避免脏数据
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1m2s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 30s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m46s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 47s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m56s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m24s
AI Code Review / AI Code Review (pull_request) Failing after 2m28s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m8s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 3m40s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m4s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 4m13s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 4m18s
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
ffd1b0f947
修复 AI Code Review 发现的逻辑 BUG:
- 转码成功后先提取元数据到临时变量
- 确认元数据提取成功后再更新 job.storage_key
- 避免 "新文件 + 旧元数据" 的数据不一致问题
xiaoxia added 1 commit 2026-08-20 11:28:40 +08:00
fix: 修复 AI Code Review 的安全和稳定性问题
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 57s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m18s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 3m36s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 3m56s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m33s
AI Code Review / AI Code Review (pull_request) Successful in 3m47s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m14s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m25s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 54s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 3m23s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m59s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 3m35s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 6m56s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 10m56s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 4m15s
CI/CD Pipeline / CI Gate (pull_request) Failing after 11s
dc3deda8d2
1. tempfile.mktemp -> NamedTemporaryFile(delete=False)
   - 避免 TOCTOU 竞态条件安全风险

2. subprocess.run capture_output=True -> stdout=DEVNULL, stderr=PIPE
   - 避免 FFmpeg 大量日志输出导致内存溢出 OOM
xiaoxia added 1 commit 2026-08-20 11:49:11 +08:00
test: 添加 HEVC 自动转码逻辑单元测试
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 47s
AI Code Review / AI Code Review (pull_request) Successful in 2m2s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 2m4s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 2m56s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m58s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 3m2s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 4m14s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m20s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m28s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 45s
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Lint (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
efe34793f3
覆盖场景:
- HEVC 编码检测(hevc/h265/hvh1,不区分大小写)
- H.264 视频不触发转码
- 转码后文件命名规则(_h264 后缀)
- 元数据提取失败时的脏数据防护(AI Code Review BUG 修复)
- FFmpeg 超时/错误降级策略
- Scale filter 逻辑(4K/1080p/720p)
- 安全修复(NamedTemporaryFile 替代 mktemp)
- 稳定性修复(stdout=DEVNULL, stderr=PIPE)
- FFmpeg 命令参数验证

16 个测试用例,全部通过
auto-approve-bot added 1 commit 2026-08-20 11:54:51 +08:00
style: auto-format with black + isort + prettier [skip ci-format-check]
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1m5s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m59s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 59s
AI Code Review / AI Code Review (pull_request) Successful in 2m3s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m32s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 2m37s
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 2m40s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m7s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 35s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m14s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 4m11s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m26s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 6m14s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 9m14s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 4m16s
CI/CD Pipeline / CI Gate (pull_request) Failing after 15s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 58s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 1m16s
1e1bc7f904
Collaborator

【阻塞级判定】

  • 是否存在阻塞级问题:否
  • 阻塞级问题数量:0 个

📊 审查概览

  • 整体评价:通过
  • 建议级问题数量:1 个

🔴 阻塞级问题(必须修复)

💡 改进建议(不阻塞合并)

  1. [apps/worker/worker_app/tasks/ingest.py:265] 模块导入位置优化
    • 具体内容:代码中将 from video_processing.oss_helpers import upload_to_oss 放在了 try 块内部的业务逻辑分支中(第265行)。虽然这可以实现懒加载或避免循环依赖,但通常建议将模块导入放在文件顶部,以提高代码可读性和依赖关系的明确性。除非存在必须在此处导入的特殊原因(如解决循环依赖),否则建议移至文件头部。

良好实践

  1. 脏数据防护:在 ingest.py 中,采用了先提取转码后的元元数据,确认成功后再更新 job.storage_key 的策略。这有效避免了因元数据提取失败导致数据库存储了无效文件路径的脏数据问题。
  2. 资源安全管理:使用了 tempfile.NamedTemporaryFile 并配合 finally 块进行清理,防止临时文件残留;同时使用了 delete=False 配合显式 unlink(),兼容了 Windows 平台下的文件占用问题。
  3. Subprocess 安全调用:调用 ffmpeg 时使用了列表形式传递参数,避免了命令注入风险;同时设置了 stdout=DEVNULLstderr=PIPE,既避免了内存溢出(相比 capture_output=True),又保留了错误日志用于排查。
  4. 降级策略完善:对 FFmpeg 转码设置了超时(300s)和异常捕获,在转码失败或超时时能优雅降级使用原始文件,不阻塞主流程。
  5. 测试覆盖全面:新增的单元测试 test_ingest_hevc_transcode.py 覆盖了命名规则、脏数据防护、安全修复验证等关键场景,质量较高。

格式检查通过 | 逻辑审查通过 | 性能无明显问题


🤖 由 AI 代码审查机器人自动生成 | 2026-08-20 03:56:50 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:否 - 阻塞级问题数量:0 个 ### 📊 审查概览 - 整体评价:通过 - 建议级问题数量:1 个 ### 🔴 阻塞级问题(必须修复) 无 ### 💡 改进建议(不阻塞合并) 1. **[apps/worker/worker_app/tasks/ingest.py:265] 模块导入位置优化** - 具体内容:代码中将 `from video_processing.oss_helpers import upload_to_oss` 放在了 `try` 块内部的业务逻辑分支中(第265行)。虽然这可以实现懒加载或避免循环依赖,但通常建议将模块导入放在文件顶部,以提高代码可读性和依赖关系的明确性。除非存在必须在此处导入的特殊原因(如解决循环依赖),否则建议移至文件头部。 ### ✅ 良好实践 1. **脏数据防护**:在 `ingest.py` 中,采用了先提取转码后的元元数据,确认成功后再更新 `job.storage_key` 的策略。这有效避免了因元数据提取失败导致数据库存储了无效文件路径的脏数据问题。 2. **资源安全管理**:使用了 `tempfile.NamedTemporaryFile` 并配合 `finally` 块进行清理,防止临时文件残留;同时使用了 `delete=False` 配合显式 `unlink()`,兼容了 Windows 平台下的文件占用问题。 3. **Subprocess 安全调用**:调用 `ffmpeg` 时使用了列表形式传递参数,避免了命令注入风险;同时设置了 `stdout=DEVNULL` 和 `stderr=PIPE`,既避免了内存溢出(相比 `capture_output=True`),又保留了错误日志用于排查。 4. **降级策略完善**:对 FFmpeg 转码设置了超时(300s)和异常捕获,在转码失败或超时时能优雅降级使用原始文件,不阻塞主流程。 5. **测试覆盖全面**:新增的单元测试 `test_ingest_hevc_transcode.py` 覆盖了命名规则、脏数据防护、安全修复验证等关键场景,质量较高。 --- ✅ 格式检查通过 | ✅ 逻辑审查通过 | ✅ 性能无明显问题 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-08-20 03:56:50 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia merged commit 85afadd166 into develop 2026-08-20 12:10:15 +08:00

🗑️ 预览环境已清理

PR #1449 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #1449 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.