腾讯云+FFmpeg打造一条完备高效的视频产品链( 十 )

腾讯云+FFmpeg打造一条完备高效的视频产品链

提及了多线程优化,我们也以使用者的角度看着,使用FFmpeg API的时候,如何设置线程。对于FFmpeg来说,大部分的情况下可能并未考虑在高负载/重耦合场景下运行的情况,FFmpeg在解码时的默认策略是根据CPU的核数创建线程,目前大部分的PC设备都是四核八线程的配置,但一个典型的数据中心的Server有48核96线程,但解码器实际上并没法同时使用这么多的核,这种情况下,需要自己控制解码线程,而非使用FFmpeg的默认策略,我们也遇到过使用FFmpeg API时候,默认创建超过1200个线程的问题。第三个是BUG的问题,FFmpeg集成时很多时候只在PC端测试过,并未在拥有这么多核的服务器上测试,使得FFmpeg的VP9encoder当时甚至会在多核服器上crash,种种事情表明,在多核服务器下使用FFmpeg,需要在多线程上做更细致的控制,而仅仅只使用其默认线程策略。另外,还有一点要提及,线程并不只是影响性能,它也会影响图像质量,我们也发现,在编码时候,随着编码器使用的线程数目的增加,其VMAF分数可能会降低。在服务器端,使用FFmpeg这类框架时候,如何在保证性能以及图像质量的前提下,怎么更好的控制线程(使用CPU的计算能力),是个非常有趣的问题。

推荐阅读