fix: 全量可选链+空值兜底,杜绝 TypeError #1445

Closed
xiaoxia wants to merge 1 commits from fix/optional-chaining-safety into develop
Owner

修复 useCanvasPlayer.ts 中所有可能触发 TypeError 的属性访问,加可选链和空值兜底。

修复 useCanvasPlayer.ts 中所有可能触发 TypeError 的属性访问,加可选链和空值兜底。
xiaoxia added 1 commit 2026-08-19 18:42:09 +08:00
fix: 全量可选链+空值兜底,杜绝 TypeError
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 API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E 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 53s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 2m7s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 2m12s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 2m28s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 18s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m24s
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been skipped
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 1m1s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 3m47s
AI Code Review / AI Code Review (pull_request) Successful in 4m10s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m1s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m45s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 7m23s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
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 / PR Build Web Image (pull_request) Successful in 4m26s
CI/CD Pipeline / CI Gate (pull_request) Successful in 9s
d1b68295cc
- info?.videoTracks?.[0] 安全访问视频轨道
- videoTrack 属性加 fallback 默认值(id=1, timescale=90000, codec=avc1.42E01E)
- segments?.[segIndex] 安全索引
- sample.cts/duration 可选链
- EncodedVideoChunk 构建加 sample.data 空值检查
- meta.timescale 除零保护
xiaoxia closed this pull request 2026-08-19 18:42:27 +08:00

🗑️ 预览环境已清理

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

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

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

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1445 | | 预览链接 | [https://pr-1445.preview.xiaoxiajianji.com](https://pr-1445.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
Collaborator

【阻塞级判定】

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

📊 审查概览

  • 整体评价:有建议
  • 建议级问题数量:2 个

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

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

  1. [useCanvasPlayer.ts: 442] 冗余的空值检查

    • 具体内容:第 438 行已经包含了 if (!sample.data || isDestroyedRef.current) continue 的判断。如果 sample.data 为空,循环会在第 438 行直接 continue,因此第 442 行新增的 if (!sample.data) continue 是永远不会执行的死代码,建议删除以保持代码整洁。
  2. [useCanvasPlayer.ts: 283] 日志级别降级建议确认

    • 具体内容:将 console.error 修改为 console.warn 会降低问题的严重等级。如果“找不到视频轨道”属于严重的数据损坏或解析失败情况,保留 error 级别更有利于线上监控和排查;如果这是预期内的兼容性处理,则 warn 是合理的。请确认此处是否应视为严重错误。

良好实践

  • 使用了可选链(?.)和空值合并运算符(??)对 segmentsvideoTrack 等对象进行了防御性处理,有效避免了潜在的空指针异常。
  • 对关键参数(如 timescale, cts)设置了合理的默认值,增强了代码在处理异常数据时的鲁棒性。
  • 在除法运算中使用 || 90000 防止了除以 0 导致的数值异常。

🤖 由 AI 代码审查机器人自动生成 | 2026-08-19 10:46:15 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:否 - 阻塞级问题数量:0 个 ### 📊 审查概览 - 整体评价:有建议 - 建议级问题数量:2 个 ### 🔴 阻塞级问题(必须修复) 无 ### 💡 改进建议(不阻塞合并) 1. **[useCanvasPlayer.ts: 442] 冗余的空值检查** - 具体内容:第 438 行已经包含了 `if (!sample.data || isDestroyedRef.current) continue` 的判断。如果 `sample.data` 为空,循环会在第 438 行直接 `continue`,因此第 442 行新增的 `if (!sample.data) continue` 是永远不会执行的死代码,建议删除以保持代码整洁。 2. **[useCanvasPlayer.ts: 283] 日志级别降级建议确认** - 具体内容:将 `console.error` 修改为 `console.warn` 会降低问题的严重等级。如果“找不到视频轨道”属于严重的数据损坏或解析失败情况,保留 `error` 级别更有利于线上监控和排查;如果这是预期内的兼容性处理,则 `warn` 是合理的。请确认此处是否应视为严重错误。 ### ✅ 良好实践 - 使用了可选链(`?.`)和空值合并运算符(`??`)对 `segments`、`videoTrack` 等对象进行了防御性处理,有效避免了潜在的空指针异常。 - 对关键参数(如 `timescale`, `cts`)设置了合理的默认值,增强了代码在处理异常数据时的鲁棒性。 - 在除法运算中使用 `|| 90000` 防止了除以 0 导致的数值异常。 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-08-19 10:46:15 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
Some checks are pending
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 API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E 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 53s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 2m7s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 2m12s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 2m28s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 18s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m24s
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been skipped
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 1m1s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 3m47s
AI Code Review / AI Code Review (pull_request) Successful in 4m10s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m1s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m45s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 7m23s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
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 / PR Build Web Image (pull_request) Successful in 4m26s
CI/CD Pipeline / CI Gate (pull_request) Successful in 9s

Pull request closed

Sign in to join this conversation.