从业务角度来看,视频编辑 SDK 上层的功能模块通常包括:抽帧模块、预览播放器模块、转码模块。
这里,我们重点说一下支持编辑能力的转码模块,为了支持编辑能力通常需要设计一套数据结构,一般包括如下概念:
配合这套数据结构的细分功能模块有:
更详细的编辑 SDK 的模块架构图,见我们的知识星球帖子:https://t.zsxq.com/16h36X77N[1]
这里我们可以将 Demuxer、Decoder 模块封装到 Reader 中,它们在一个线程中来处理数据读取、解封装、解码几个环节的工作,并将解码后的数据存入 FrameBuffer 缓冲区。
我们将 Encoder、Muxer 模块封装到 Writer 中,它们在一个线程中来处理编码、封装几个环节的工作。其中编码需要的数据通过一个回调向 Reader 要数据,在回调中,Reader 将其 FrameBuffer 中缓冲的数据喂给 Writer 的 Encoder 来进行编码。
上面的设计是一个比较简要的设计,这里还有一些经验可供参考:
更直观的转码流程 pipeline 图,见我们的知识星球帖子:https://t.zsxq.com/16PFkFene[2]
直播中发现有回声,可能有如下原因:
我们可以分下面几层来设计播放器的架构: