ffmpeg集群分布式转码的设计思路 所需技术和难点

 xiezixing @ 2019-01-17 12:02:13

如果看过我以前写的ffmpeg单机多线程转码的教程,其实ffmpeg集群分布式转码就是单机多线程转码的延伸。我们来看看ffmpeg集群分布式转码到底要如何实现。

首先要知道ffmepg能利用单核的最大效能,大概ffmpeg一个进程只能利用一个单核的100%的效能(某些情况除外),如果要完全压榨cpu的能力,那么只有通过比较特殊的方式变相的实现,比如我以前所写的利用多个ffmpeg进程对单个视频文件进行转码的教程,但是毕竟单机的运算能力有限,所以就需要我们有能力搭建集群分布式的ffmepg转码架构。

我们先来看示意图:
总控.png

内网集群的搭建示意图如上,这个是最简单的示意图,后面我会根据这个示意图来讲解集群转码的设计思路。

首先我们从用户开始上传视频就开始设计,现在大部分上传插件都带有分片上传的能力,可以将一个完整的视频,分成一块一块几M一个文件上传,而最后再通过服务器将所有分片合成一个完整的文件,但是假如我们不合成这个视频,而在上传的时候就将分片分发到集群机器上边进行转码工作。

如上图,当总控接收到用户上传的分片视频片段,就立刻将片段分发到内网集群机器上去,然后内网机器再接收分片完成的同时,总控就发起ffmpeg转码请求。

最终理论上,在用户上传完所有视频片段的时候,视频所有片段也就转码完成了,总控再发起合并请求,将所有内网转码完成的视频片段同步到总控某个文件夹中,再根据数据库中的前后顺序进行合并,最终一部完整转码完成的视频文件就搞定了。

其实设计思路比较简单,但是实现上的技术难点还是有难度。

技术选型: nodejs作为后端api服务,vuejs+vuetify作为前端

难点在于总控的控制,比如如何得知分片在内网上转码完成,总控和内网集群的通信机制等。

目前暂时透露这些,其实还可以配合单机多线程技术同时压榨CPU效能,例如24核机器4台,那么配合集群分布式和单机多线程技术可以达到同时100核同时转码一部视频,这将是多么大的效率提升。