FFmpeg 音视频开发 20 年

2021年4月27日 329点热度 0人点赞 0条评论

感谢小编邀请,让我写下 FFmpeg 20 年这么有历史厚重的话题。

写文章其实比录视频教程要求高很多,要字斟句酌,逻辑严密,理论知识严谨。由于个人文笔实在有限,长期以来,不敢随便写文章,更不敢出书,更不敢妄论FFmpeg,更何况很多资深从业者在这个领域

很多年靠它吃饭,其中包括很多年赚10亿+的上市公司。GPL/LGPL 错综复杂的开源社区与商业项目的感情交织,牵涉很多人的利益,所以聊这个话题,稍不注意就会被围攻。

只能说从一个 10 年+音视频行业开发者,FFmepg 使用者的角度,谈一些自己的经历,看法。给大家一些参考。

为什么我来聊这个有争议的话题,一方面从业时间长,另一方面,个人也是 FFmpeg 开源项目受益者。我们 2014 年曾经靠三个主力研发,做的产品用到 FFmpeg 解码部分,单品也在市面上卖了两三个亿。

所以聊 FFmpeg,无论从纯技术角度,还是从商业产品的角度,我都有点小小的经验可以分享。

FFmpeg 是由法国天才程序员 Fabrice Bellard 发起的,2004 年至2015年间由 Michael Niedermayer 主要负责维护的一个音视频领域最受欢迎的开源开发框架。Fabrice Bellard 同时也是 QEMU,TinyCC 等著名应用程序的作者,QEMU 是一个虚拟机项目,目前大量运用与各种安卓模拟器,我们经常看到国外的各种大神在 iOS 上运行了 XP 啊,在 ipad 上用上了 windows,或多或少都用了 QEMU,所以它的受欢迎程度一点都不亚于 FFmpeg 项目。

首先向开源大神致敬。

用 FFmpeg 这样的开源项目,我们无法规避的就是各种开源的协议,GPL/GPLV3/LGPL/LGPLV3, 过去二十年发生过各种争议,包括很多产品还被钉在耻辱柱上。用一句简单的话来说,就是 GPL 是不可商用的,

LGPL 可以开发闭源商用的软件,但只能用动态库,并标明你使用了 FFmpeg 动态库。静态链接的方式是不允许的,除非你开源软件项目。所以我们在 14 年之前,使用 FFmpeg,参考了那个时候国外的两个号称独角兽的公司,一个叫 Drapcam(后来被 Google 收了),另一个叫 Beam。在国外,基本上这两个公司家喻户晓,产品很有名。因为在欧美,产品受各种法律条款的监管还是非常严格的。如果你的产品要卖到欧美,

使用了FFmpeg,可以参考他们的使用方式,法律条款。https://suitabletech.com/

我们可以大致将 FFmpeg 或者说音视频领域的发展,划分为3个时间阶段。1: 90年代~2007年    2:  2008年~2017年  3:  2107年以后 

图片

「1 2007 年之前的阶段」

(FFmpeg第一个版本准确地说是2000年发布的) 这个阶段我们听到的都是各种恩怨纠葛,商业与开源的争论,计算机刚刚能够处理音频,视频的时候,一时间,出现了各种以编解码为核心技术的公司,

我们现在隐约能够记得的比如 rmvb,当时如日中天,谁抢占了音视频编解码的制高点,谁就掌握了下一个时代,当然最后由行业统一的协会结束了这种纷争,到2007年苹果发布iPhone,力挺 H.264 mp4 后,行业统一为 H.264 mp4。

FFmpeg 诞生之初,就是为了去解决各种音视频编码协议,被商业公司垄断,各种协议不兼容的问题,所以,你可以把 FFmpeg 看成一个音视频编解码,格式解析,转换的大集合。

由于欧美数字音响版权保护严格,各种格式不兼容,比如一个人,想把电脑里面的视频,歌曲放到手机里面,车载系统里面去,就很麻烦。于是乎,就存在了一个潜在的法律擦边球的市场,格式转换。

国内最早一批软件出海开发者(现在可能是某些上市公司的大老板)找到了这个商机,于是第一批软件出海者,靠 FFmpeg 闷声发财的时候,本人还在考大学。

当时最出名的播放器,比如 KMPlayer、MPlayer SMplayer,各种格式转换软件,绝大部分都基于 FFmpeg,当时关于商业与开源,开源协议之争,就不继续聊了,很多都成为了历史,大家都不记得了。

中国第一批软件出海者,如何闷声发大财,可以参考李自然老师的视频:https://www.bilibili.com/video/BV1Lb411m78f   。

(注:任何人的视频,文章,大家都可以听听,作为参考,不一定100%准确,读者应该有自己的判断)

「2 2008~2017 移动编解码芯片大发展 OpenGL/ES时代」

虽然视频编码格式,视频容器得到了统一,但总有一个过程,要知道,iOS 8 2014年之前,苹果是不开放硬件解码接口给第三方应用的。所以这给了 FFmpeg 在 iOS 上应用的一个非常大的机会。

因此2014年之前,绝大多数做视频类应用,都使用 FFmpeg+OpenGL ES。FFmpeg 负责解码,OpenGL ES 负责渲染视频,shader 硬件加速转换 rgb(YUV转RGB传统算法耗CPU)当时跑 1080P,2M 码流勉强够用。

偶尔冒出一个团队说,他们做了iOS上的硬件解码,是怎么hacking进去获得iOS硬件解码未开放的头文件的,我们都羡慕不已。

伴随着移动时代的到来,OpenGL/ES 成为了行业标准,OpenGL/ES 除了运用在跨平台游戏引擎,3D 建模仿真领域,其实很大的一部分用在了视频图像处理领域。2010年,PC 集成显卡,都逐渐支持了 OpenGL 。

开源GUI框架Qt,发布Qt5的时候,更是直接跟 OpenGL/ES 进行了深度绑定,Qt 因此成为行业最受欢迎的跨平台 GUI 开发框架,图像处理能力十分强悍,生产力软件行业巨头maya、Substance Painter非常受欢迎的

视频剪辑软件 Davince(达芬奇)都基于 Qt+OpenGL 开发。OpenGL/ES 作为行业的统一标准,跨平台游戏引擎,音视频数字图像处理,程序员们,迎来了黄金的十年。

这个10年,API 统一,写一次代码,不怎么修改,到处跑。想想都让人感动。我们看到的各种变脸,抖音的特效,各种 filters,贴纸,都出自 FFmpeg 或硬解码结合 OpenGL/ES shader 做出来的效果。

到目前为止,我们依然可以看到字节等各大互联网公司,一直在招聘 FFmpeg,OpenGL/ES 高手。

在芯片领域,从当年晦涩难用高门槛高价格的 TI DM365 嵌入式芯片,到 SDK集成度非常高,价格低廉,对开发者非常友好的 3518系列海思芯片,带来了中低端芯片在安防,智能家电,行车记录仪领域(安霸)的大规模应用。

嵌入式智能硬件开发,在这个 10 年,也是如火如荼,深圳这个硬件之都,集中了几千家做外贸的安防公司。每年数亿级别的摄像头相关的设备,卖到了欧美市场。海思也成为这个领域的老大。

智能硬件,结合移动设备,硬件首先要跟手机建立通讯。所以程序员要做这个领域的开发,对 TCP/IP UDP 网络通讯,要有深入的研究,同时需要掌握 FFmpeg H.264 音视频基础 OpenGL/ES等知识。

4G 家庭带宽提升带动了移动直播的盛行,RTP/RTCP/RTMP/HLS 流媒体协议,网络直播过程中的各种网络通讯问题,一直是研发人员花大量的精力去解决的问题。

同时 PC,手机视频剪辑,生产力软件领域,在Adobe Premire,Finalcut pro, 达芬奇巨头垄断的市场,国内厂商也逐渐占有一席之地,一年在欧美市场卖几个亿是常见的。

这也得益于 OpenGL/ES 的大规模普及,PC 集成显卡,都支持 OpenGL3.3 或者更高的版本。让视频剪辑中,各种动画,特效处理,成为了可能。

移动黄金十年,也是中国社会变化最快的十年,各大公司百花齐放,只要涉及音视频处理,背后都有 FFmpeg 的身影。这个十年,大家一路狂奔,似乎也没什么人去关心 LGPL GPL,你是动态链接呢,

还是static,各个开发人员,大小公司,都在里面做出了非常不错的产品,服务全球的消费者。

「3 2017年后」

IT行业的发展的基石,依然是芯片。iOS 2017年后已经全面支持 H.265 硬件编解码。

Intel 2017年的 kaby cpu 开始支持 H.265 硬件编码。2019 年后的 coffee,全面支持 265 硬件编码。所以目前。H.265 应该是主流了。

通过下图,可以看看你的 CPU 是否支持 H.265 硬件编解码。

图片图片

FLASH 的没落,RTMP 也很久不更新了。传统 TCP 在音视频传输过程中延迟的问题,中心化服务器带来的流量,资费问题。需要一套技术上高效可靠,经济实惠的音视频传输框架。P2P 结合relay 的方式是最为理想的。所以对于中小型公司,做音视频直播,视频会议相关的产品,自研 UDP,P2P 是不太可能的,运营这样一个研发团队,一年的开销是千万级别的投入。所以 webrtc,甚至第三方基于 webrtc开发的sdk,成了中小公司进入音视频领域的最快做产品的方案。未来 WebRTC 在国内的应用,也会越来越流行,需要大量的开发者。

Metal/Vulkan/D3D 各大巨头早已推出了下一个20年的全新的标准。MediaCodec/AVFoundation 成为移动平台硬件编解码的标配。我经常告诉群里学员说,如果你没有特殊的需求,在iOS 上,你可以直接使用硬件编解码,不要使用FFmpeg了,在安卓上,很多年前,我们说的是硬编软解,目前,也应该可以直接上硬件编解码了。人们不禁要问,FFmpeg 还有用吗?OpenGL/ES 还要学吗?

答案是肯定的,需要学习。通过学习 FFMpeg, 初学者进入音视频领域用 FFmpeg 作为入门,能学到非常多的音视频领域的基础知识,体验 FFmpeg 优雅的 c 语言封装的 API,AVFormatContext,AVCodecContex,AVStream,AVPacket,AVFrame, PTS ,DTS,音视频同步,音频重采样,RGB,YUV420P,X264 编码器,AAC 编码,libfdk-aac liblame mp4 容器,I P B 帧的特点,OpenGL/ES context,VAO VBO EBO FBO PBO 模型视图矩阵,观察者矩阵,投影矩阵推导。GLSL可编程管线,在数字图像处理领域的高效强大。本人作为 2010 年毕业的从事音视频开发的从业者,在商业产品中,可能用到的 FFmpeg API 非常少,有时候就30行以内的解码代码,但作为音视频领域,曾经非常重要的技术框架,也不妨碍本人去学习它。对于深入从事编解码算法的程序员,做芯片开发的程序员,FFmpeg解码器,X264编码器开源的代码,都可以成为你非常好的参考资料。

同样的问题,可以直接学习 Vulkan/Metal,而不用看 OpenGL/ES 吗?

肯定是不能的。原因在于计算机图形学的基础知识,向量,坐标系,矩阵算法,投影矩阵,观察者矩阵,模型视图矩阵,法线贴图,这些推导过程,大量的资料,像glm这种非常重要的库,3D空间的拾取算法,理论资料,都基于OpenGL的,甚者是D3D的,所有很多时候,我们依然在从2000年左右的一些老程序员的文章,资料中学习。当我们熟悉了Metal/Vulkan API去写项目的时候,比如你去写一个渲染引擎,去写一个交互式3D的建模工具,你遇到的问题,跟用 OpenGL 去写遇到的问题一模一样,同样的 IndexBuffer,类似的VBO。 同样的 shader,大部分情况,换了一种写法。

「4 未来?」

新技术的革命,会创造一大批如雨后春笋的公司。比如08年,你手里有一套 OpenGL ES的游戏引擎,拿来写游戏,你就有可能创造几十亿价值的公司。2017年后移动互联网红利已经结束。

下一个10年,技术还是那些技术,主角或许从移动App,变成了AI,边缘计算。如果不是xx战,今年海思的AI芯片,4T算力的可能会在下探到10个美金以下。芯片的大规模量产,价格下降,会带动行业新一轮变革。

软件开发者,也会有相应的全新的机会,音视频,网络通讯,OpenGL/ES 都是必须要掌握的,从事相关开发,加上OpenCV, Tensorflow-lite. 深度学习基础。个人一点看法,仅供参考。

所以单纯聊 FFmpeg 已经没有什么意义,聊点音视频,数字图像处理,网络通讯,跟 FFmpeg 相关的,或许更有参考价值。FFmpeg 的未来在哪里?一项技术只能在一个合适的时间段解决一个特定的问题。

FFmpeg 或许在未来的某个产品里面,我们会用到它的一些功能,类似 OpenGL/ES 也一样。比如在 iOS 上,我们想做并行计算,做AI图像处理,那我们就不得不用 Metal。 

开源与商业,个人的态度是尊重开源,严格按照开源协议来做商业产品。因为商业产品的成功,背后可以带动就业,背后是无数个家庭,靠它吃饭,消费者也能从中获益。

开源打破了垄断,消除了行业壁垒,推动了社会的进步。希望国内的公司,作出更多好的产品,占领欧美市场,赚欧美市场的钱,占领制高点完成产业升级,程序员才能拿硅谷一样高的薪水。

本人写文章水平有限,时间有限,勉强看,不对的地方,请谅解。写FFmpeg技术细节,单纯写FFmpeg20年发展历史,是不完整的,所以引出了OpenGL 网络通讯等相关的框架。

以后,本人也会多锻炼下文笔,多写点单纯的技术文章。谢谢把这么枯燥的文章看完的同学。

作者:chenchao
来源:https://blog.csdn.net/chenchao_shenzhen/article/details/111532282


-- END --

进技术交流群,扫码添加我的微信:Byte-Flow


图片


获取视频教程和源码



推荐:

Android FFmpeg 实现带滤镜的微信小视频录制功能

全网最全的 Android 音视频和 OpenGL ES 干货,都在这了


觉得不错,点个在看呗~

图片

82680FFmpeg 音视频开发 20 年

这个人很懒,什么都没留下

文章评论