本文来自FFmpeg Maintainer赵军在LiveVideoStackCon 2018热身分享,并由LiveVideoStack整理而成。在分享中,赵军介绍了FFmpeg的历史、关键组件,并介绍了英特尔平台上的多种FFmpeg硬件加速方式。
文 / 赵军
整理 / LiveVideoStack
大家好!我是赵军,现就职于英特尔的DCG从事基于FFmpeg的硬件优化工作,两年多前加入FFmpeg社区,2018年4月成为FFmpeg的其中的一个FFmpeg Maintainer,主要负责FFmpeg的硬件优化工作。
概览:
什么是FFmpeg
FFmpeg组件
FFmpeg开发
我们的主要工作
回顾与总结
1、什么是FFmpeg
FFmpeg诞生于十几年前,最初是作为一个MPlayer播放器的一个子项目出现。因为当时的播放器有需要支持各种各样解码的需求, 其中有一位Mplayer的开发者看到了这样的需求,于是编写了FFmpeg。
它作为迄今为止最流行的一个开源多媒体框架之一,FFmpeg有两种基本使用方式——作为库或者作为工具,其中后者的使用场景更多,同时它也被称为多媒体开发的“瑞士军刀”。FFmpeg库中90%的代码以上使用C,同时也有一些汇编语言上的优化,还有一些基于GPU的优化。对于汇编优化而言,由于YASM对最新的CPU指令支持效果不好,FFmpeg的汇编现在正在向NASM转变。FFmpeg本身有一些基本的开发策略,希望所有的Codec集成在内部库中随时调用;当然它也在必要时可以依赖一些外部第三方库,例如像众所周知的X.264。(X.264作为一个Encoder来说已经足够优秀,我们可以看到大部分的商业产品都以X.264为对标,常会看到某某Codec宣称比X.264好多少,似乎X.264已经成为业内一个基本对标点)。FFmpeg同样也是一个跨平台的产品,主要的License是GNU GPLv2,或GNU LGPLv2.1+的,讲到这里我想说的是,希望大部分的使用者也能够在项目通过声明使用了FFmpeg这一点为开源社区带来正面的反馈。
1.1 FFmpeg的发展历史
这里需要说明的是FFmpeg与Libav之间的关系, 2011年FFmpeg社区中的一部分开发者因为某些原因脱离了FFmpeg社区并创立了Libav社区,而后来使用Libav的大部分的发行版本又慢慢迁移回了FFmpeg。但是,直到现在仍有几位脱离FFmpeg社区的主要开发者坚守在Libav,而大部分的开发者与资源都重新迁回了FFmpeg社区。现在FFmpeg的最新稳定版本为2018年4月更新的v4.0.0,从v3.4.2 到最新的v4.0.0,其中最大的改进之一便是硬件加速。
1.2 使用场景