视频上传 service(netflix & youtube) 中的上传流程问题

复习视频系统的设计, 下面是我思考的一些life cycle

  1. 一般视频上传service 是本地先填写各种description, tag, 然后在local (phone, 网页) 做最初级的validation 后, 将一些meta data 信息发给(metadata service), front service 返回一些 object storage 的url, video Id(这里的video id 是应该由client 生成呢, 还是由metadata service 生成)
  2. local 客户端基于返回的url, 对上传视频, 问题是在这一部, 视频 应该是分成很多个segment 分别上传的
  3. 上传成功后, local 的客户端会给metadata service更新视频的status, metadata service会基于最新的status 去trigger transcode service

问题是,

  1. 第三步trigger transcode service 是否需要等 同一个视频的所有segment 都上传完再开始process, 还是但凡有segment 成功上传, 就trigger 基于这个segment的transcode process,( 感觉应该是个trade off)

  2. 还有就是如果segment 确实是由client 来做的, 在transcode 那一步是否还会针对segment 作进一步的 分段处理

  3. 最后视频被编辑完, 整合以后(packaging service ), 还是会存在S3 里, 那么最初从client 那里上传的视频是否还需要保留呢

上述理解不知是否正确, 求解惑

  1. 比较简单的做法是上传和编码两个步骤分开,前者虽然上传过程中需要分段,但是从结果上看,可以认为上传了一个完整的大文件。后者编码虽然也是要分成小文件的,但分法不一定需要一样。我觉得最简单的就是等所有都传完了再开始编码。
  2. 上传时候的分段和transcode时候分段不一定要用一样的方法。上传的时候的分段可以就是简单的把文件分成4MB一段,这种分法的每一段可能都是不能播放的,重新拼起来以后才能放。Transcode 可能是按照分钟来,或者其他算法。
  3. 存S3,以及有需要的话部署CDN,原始视频留不留都可以。