文章

音视频上传组件

介绍音视频上传组件的架构和模块设计思路。

音视频上传组件

本文转自微信公众号 关键帧Keyframe,推荐您关注来获取音视频、AI 领域的最新技术和产品信息

微信公众号 微信扫码关注我们

您还可以加入知识星球 关键帧的音视频开发圈 来一起交流工作中的技术难题、职场经验

知识星球 微信扫码加入星球

1、音视频上传组件框架

音视频上传组件提供了多种上传方式的支持。

视频文件上传是最基础的 HTTP 上传的方式。

视频分片上传是支持将文件分片并行上传的方式。

流式上传是支持将视频切割成独立的切片(FMP4、TS 等),按流水线的方式上传。

2、实战解析

2.1、分片上传

分片上传就是将所要上传的文件,按照一定的大小,将整个文件分隔成多个数据块再进行分别上传,上传完之后再由服务端对所有上传的文件进行汇总整合成原始的文件。

分片上传可以避免因网络环境不好导致的一直需要从文件起始位置还是上传的问题,还能使用多线程对不同分块数据进行并发发送,提高发送效率,降低发送时间。

分片上传的流程大致如下:

  • 1)将需要上传的文件按照一定的分割规则,分割成相同大小的数据块;
  • 2)初始化一个分片上传任务,返回本次分片上传唯一标识;
  • 3)按照一定的策略(串行或并行)发送各个分片数据块;
  • 4)发送完成后,服务端根据判断数据上传是否完整,如果完整,则进行数据块合成得到原始文件。

在整个数据上传的过程中还涉及数据的签名校验,防止数据被恶意篡改。

2.2、断点续传

由于分片上传的数据是永久性的,因此可以很容易的基于分片上传来实现断点续传。

在分片上传的过程中,如果因为系统崩溃或者网络中断等异常因素导致上传中断,这时候客户端需要记录上传的进度。在之后支持再次上传时,可以继续从上次上传中断的地方进行上传。

为了避免客户端在上传之后的进度数据被删除而导致重新开始从头上传的问题,服务端也可以提供相应的接口便于客户端对已经上传的分片数据进行查询,从而使客户端知道已经上传的分片数据,从而从下一个分片数据开始继续上传。

2.3、流式上传

流式上传是支持将视频切割成独立的切片(FMP4、TS 等),按流水线的方式上传。对于上传客户端,只要第一个分片上传成功后,就可以拿到服务端存储服务返回的视频地址,完成业务数据提交。服务端收到一个分片就可以对这个分片进行转码,不必等一个视频的全部数据完全上传完成。

本文由作者按照 CC BY-NC-ND 4.0 进行授权