Skip to content

[P1] 增加服务端流式转码与 HLS 播放 #11

Description

@mahoshojoHCG

背景

浏览器 MKV 后备路径会先下载完整源文件,再在 FFmpeg WASM 中转码,并把完整输出 MP4 物化为 Blob。数 GB 动画在手机、低内存设备或弱 CPU 浏览器上容易等待过久或内存不足,且客户端之间无法复用结果。

相关代码:

  • SecondDimensionWatcherReDive.Client/src/playback/mkv/transcoder.ts
  • SecondDimensionWatcherReDive.Client/src/pages/PlayerPage.tsx
  • SecondDimensionWatcherReDive/Controllers/FileController.cs

目标

在保留原始文件直放和外部播放器能力的同时,为不兼容媒体提供可缓存、可拖动、低首帧延迟的服务端播放路径。

建议范围

  • 播放前探测容器、视频、音频和字幕轨道。
  • 优先 direct play,其次无损 remux,最后才转码。
  • 服务端异步生成 HLS(或 DASH)分片。
  • 支持可选硬件加速及 CPU 回退。
  • 转码任务有并发、CPU、内存、磁盘配额和取消。
  • 按源版本、轨道和质量生成缓存键,支持 LRU/TTL 清理。
  • API 展示排队、转码、失败和缓存命中状态。
  • 文本字幕转为 WebVTT;位图字幕明确提示或按配置烧录。

验收标准

  • 不兼容 MKV 无需客户端下载完整源文件即可开始播放。
  • 支持拖动、暂停恢复和自动播放下一集。
  • 重复播放可复用已生成分片,源变化后不会复用旧缓存。
  • 并发超限时排队而不是耗尽主服务资源。
  • 取消、失败和清理不会留下无限增长的临时文件。
  • direct play、播放进度、字幕偏好和外部播放器保持兼容。
  • 提供首帧时间、转码速度、失败率和缓存占用指标。

预估工作量:高

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions