视频文件预上传到播放的完整流程

预上传流程

用户发起视频上传请求后,前端调用FileController.preUploadVideo接口。系统生成唯一uploadId并保存预上传信息至Redis缓存,包括文件大小、分片数量等元数据。uploadId返回给前端用于后续分片标识。

分片上传流程

前端根据uploadId将视频切分为固定大小分片,循环调用FileController.uploadVideo接口。每个分片保存到临时存储目录,Redis实时记录已上传分片索引。全部分片上传完成后触发异步合并操作,将分片按序合并为完整视频文件。

转码处理流程

UCenterVideoPostController.postVideo接口接收视频元数据并写入数据库,状态标记为"待转码"。Redis队列REDIS_KEY_QUEUE_TRANSFER接收转码任务,ExecuteQueueTask.consumeTransferFileQueue监听队列并调用VideoInfoPostService.transferVideoFile。转码服务使用FFmpeg生成HLS格式的M3U8索引文件及TS分片,输出到指定CDN目录。

播放流程

前端请求FileController.videoResource获取M3U8索引文件,解析后按需加载TS分片。每次分片请求触发FileController.videoResourceTs接口,返回对应TS文件内容。播放行为数据写入REDIS_KEY_QUEUE_VIDEO_PLAY队列,由ExecuteQueueTask.consumeVideoPlayQueue异步处理。播放统计更新涉及:

  • 数据库play_count字段累加
  • 通过EsSearchComponent.updateDocCount同步更新ES索引
  • 实时排行榜数据更新
关键技术点
  • 分片上传采用断点续传机制,通过Redis记录进度
  • 转码任务采用异步队列处理,支持水平扩展
  • HLS分片播放适配不同网络环境
  • 统计系统通过消息队列解耦,确保高并发下的数据一致性
Logo

火山引擎视频云技术社区,是面向 AI 音视频开发者的技术交流平台。这里汇聚源自抖音、豆包等亿级 DAU 产品的 RTC、直播、点播、AI 媒体处理、音视频互动技术,提供接入指南、最佳实践、性能调优、场景案例、Demo 代码、开源项目、白皮书和 API 文档。社区汇聚官方工程师与一线开发者,为 AI 视频通话、数字人、AI 视频处理等应用的开发与落地提供技术支持。

更多推荐