
C++
下面来谈谈我所了解的几个音视频项目的相关情况。FFmpeg这个项目,其代码主要采用C和汇编编写,很少会用到
C++,只有在依赖的第三方库仅有
C++接口时(通常不欢迎没有C接口的第三方库)才可能会用到
C++。gstreamer项目主要是基于C语言的,并且它构建了一套GObject的面向对象设计。VLC项目主要以C语言为基础,只有少数插件是通过
C++来实现的,其在
Android和
IOS版本的上层使用了一套
C++封装接口。mpv项目和FFmpeg有着一脉相承的关系,也是用C语言编写的。obs项目的核心是C语言编写的,不过有一些插件是通过
C++实现的。x264是用C语言编写的,而x265则是采用
C++编写的。dav1d采用C语言编写,srs和medi
AInfo是用
C++编写的。在开发者群体中,有不少人喜欢C语言而厌恶
C++。对于性能敏感的项目,开发者往往希望能清楚知晓每个语句在CPU中的执行情况,
C++较高的封装抽象程度会让一些人觉得不适应。例如,用C语言开发的x264非常稳定,而用
C++开发的x265至今仍然存在各种内存问题,虽然语言可能不是主要原因,更多的是人的因素。另外,C语言的编写方式容易让大家达成共识,而
C++在一些小细节上容易引发很多争论,这对于社区的运行是不利的,特别是在没有一个能拍板做决定的负责人的情况下,争论会无休止地进行下去。像WebRTC这种由
公司主导的开源项目就不存在这样的问题。我并不讨厌
C++,我自己写东西就会用
C++,因为这样开发效率高,比较省心,而且不用和别人争论该怎么写(我自己能做主)。多数
C++开发者,如果没有经过专门的训练,基本上无法用C语言开发稍大型的项目。从实用的角度来说,还是踏踏实实地用
C++编写比较好。