现在的转码程序是在通过增加WINFORM程序提高转码能力,存在下面两个问题:
(1)FFMPEG转码非常费CPU,单个转码任务就会占用90%,一台主机上部署多个转码程序意义不大。
(2)现在的扩展,是按最小单元为一个视频的方式进行扩展,比如一个视频是1个小时的,最低转码时间是半个小时,不会因为增加转码机而提速。
思路:
采用一个主控机+N个转码机的方式,主控机负责接收任务并将MP4分割,分发给各个转码机,在所有转码机完成转码后,负责将最终的视频进行合并成H264的MP4,同时切片为m3u8格式。真正实现将文件分割进行提速,这样,半小时的转码任务,按5台机器同时工作计算,6分钟左右即可完成,而且随着转码机的数量投入而变短,可以最大限度的利用硬件设备提高转码速度。
一、分割视频:
MP4Box -split-size 50000 test.mp4 #50MB一个文件
MP4Box -split 50 test.mp4 #50秒一个文件
二、分布式调度
不依赖于任务现成的框架,采用REDIS分队列的思路。
(1)比如有5个处理机,就在主控程序上直接划分开5个REDIS队列,分别是dulie_1---->dulie5
(2)然后按均匀的方式将分隔开的小MP4文件任务平均分布到各个队列中。并将此任务的分发情况记录到SET中,最终如果SET的结果回写数量与最初发出去的数量一致,标识为完成。
(3)各转码机通过程序获取到任务后,开始进行转码。完成后回写REDIS键值表示此任务完成。
(4)主控机每1秒轮询SET将完成好转码工作进行视频合并,并切片为M3U8。
三、合并视频
mp4box -cat test1.mp4 -cat test2.mp4 -new test.mp4
命令行参考:
https://mkvtoolnix.download/doc/mkvmerge.html
参考资料:
https://blog.csdn.net/qq_44884706/article/details/89227746
https://blog.csdn.net/zileqide/article/details/89648433