# 短视频上传播放链路

短视频是新版 64 位客户端中的核心技术链路之一。它包含文件选择、校验、封面、multipart 上传、列表回流、播放、点赞、评论和横竖屏适配。

## 上传路径

新版短视频上传包含：

- 用户选择视频文件。
- 读取文件大小和真实时长。
- 抽取首帧作为封面，支持自选封面覆盖。
- 上传前确认标题、文件、大小、时长和封面来源。
- multipart 上传视频和封面。
- 上传进度来自文件字节写入回调。
- 失败后保留已选视频，允许重试。

## 异常 MP4 拦截

项目中出现过“上传成功但播放失败”的真实问题。排查后发现服务端保存的 MP4 文件只有几百字节，属于空壳文件。HTTP 200 和 MIME 正常并不代表视频有效。

修复策略：

- 选择视频后校验大小和时长。
- 提交前再次校验。
- API 上传前兜底拦截小于 32 KB 的视频。
- 测试矩阵要求用正常 MP4 回归上传、列表回流和播放。

## 播放比例

短视频素材可能是竖屏、横屏或方形。新版在播放器 prepared 后读取真实 `videoWidth` 和 `videoHeight`：

- 竖屏视频优先按高度展示。
- 横屏视频优先按宽度展示。
- 普通视频按容器居中适配。

这样可以避免竖屏视频被压成 16:9，也避免横屏视频被强行拉伸。

## 播放页交互

短视频沉浸页逐步补齐：

- 上下滑切换视频。
- 右滑进入作者页。
- 点赞局部刷新，不重建整个播放页。
- 评论抽屉承载评论列表和发表评论入口。
- 播放失败留在播放器区域内提示重试、下一条或返回列表。

## 技术取舍

当前阶段使用系统 `VideoView` 打通播放闭环。这个选择依赖少、实现快，适合迁移期验证。后续如果要支持缓存、多清晰度、复杂错误恢复和更专业的信息流体验，可以评估 ExoPlayer。

