《FFmpeg原理》的创作之路 - C语言音视频技术

/ 0评 / 4

写作不是思考的记录,写作就是思考本身。—理查德·费曼

写作不仅仅是 学习的记录,还可以帮你进行系统的思考,有很多东西,会在你写作的过程中不断被深入。甚至有些认知误区或者模糊的知识点你自己没意识到的,直到写出来了才明白。

FFmpeg原理》的创作之路其实就是 我自己学习音视频技术的过程,我在2年前不是做音视频开发的。之前更多的是做PHP后端开发。所以对 C/C++ 并不是特别熟悉。

当我决定学习音视频的时候,我立即买了好几本高大上的书来看,例如《信息论》《数字视频编码技术原理》等等。这些书其实我在2年前是看不懂的,我硬着头皮去看了一个月,也看不懂。

后来发现,是我的学习路线错了。音视频开发,基本上使用的都是 C/C++,所以首先需要学习的是 编译链接调试 的基础知识,做到大多数 C/C++ 项目都能顺利 build 起来,然后单步调试。

你得先是一位 C/C++ 工程师,然后才能成为一位 音视频 工程师。

所以在阅读了 俞甲子的《程序员的自我修养》跟 张银奎老师的《软件调试》之后,我精炼出了一章《编译链接基础知识》的内容,如下:


在掌握了 C/C++ 基本的 编译链接,调试的知识之后,我们就可以去学习 FFmpeg 的 API 函数的用法了。有可能会有同学问,那 C/C++ 的语法用不用学,这个我觉得学个 50% 就行了,剩下的语法知识,你直接在实战中,在调试别人的代码中学习会更加快。

如果你一直不去实战,不去调试,不去看别人成熟的代码设计。会很容易陷入 C/C++ 的语法迷宫。


音视频开发,我个人觉得起步还是需要踏实一点,一开始你不用去看那些 编解码算法,只需要知道 编码系统 可以压缩数据就行了。

刚开始,你只需要去学习各种库的基本使用就行,音视频领域有很多库,有非常多的框架,如下:

  1. Android 多媒体框架,包括 MediaPlayer,MediaCodec 等等。还有 OpenMax
  2. IOS,macOS 的多媒体框架 AVFoundation
  3. Windows 的多媒体框架,Media Foundation,DXVA
  4. FFmpeg,GStreamer,webrtc,OpenGL,OpenCV

在《FFmpeg原理》里面,主要就介绍 FFmpeg 这个库的基本使用,如下:


但其实,掌握了 FFmpeg 库的基本使用之后,还是不够,因为对于 FFmpeg 这个开源项目来说,除了 libavformat.solibavcodec.so 等等 8 个动态库之外,还有一个 ffmpeg.c

ffmpeg.c 是什么?

ffmpeg.cffmpeg.exe 命令行的核心代码,ffmpeg.c 也是调了 8 个动态库的 API 函数来实现自身功能的。但是 ffmpeg.c 本身有 5千多行代码,这 5000 多行代码是处理各种场景的鲁棒性,pts 时间戳,各种参数设置的。

ffmpeg 开发最难搞的就是各种参数的设置,如果你自己调 API 实现功能,肯定会遇到某些参数设置错了,某些参数漏了没设置等等,问题。

ffmpeg.c 把这些细节问题通通帮你解决了。

所以在学习了 FFmpeg API 函数的基本使用,基本的 解复用解码编码Muxer 的过程你也了解了,如下:

现在就需要去学习 ffmpeg.c 的代码,不用了解 ffmpeg.c 里面所有的细节,做到 能根据需求 二次开发 ffmpeg.c 即可,这也就是《FFmpeg原理》一书的《ffmpeg.c源码分析》一章的内容,如下:


当你掌握了 FFmpeg API 的基本用法,也可以二次开发 ffmpeg.c 之后,大部分的需求你基本都能解决了。但是还有一部分需求需要更深入知识。

例如自定义一个 Demuxer/Muxer 来实现加密播放器的功能。自定义一个 AVFilter 来实现特定的视频效果。等等,这个就是《FFmpeg原理》下册的内容,如下:


最后再分享一下我创作这本书的一些经验。

1,不要设置 Deadline

因为写作是需要灵感的,灵感不会因为你设置了 Deadline 就会蹦出来。相反 Deadline 会阻碍灵感的产生。

当 Deadline 到期的时候,匆匆忙忙把一些章节内容完成,很容易避重就轻。

我觉得一部好的作品,它是没有完成的那一天的,因为我平时就是有灵感,想到了更好的表达这个算法的描述,我就去修改文章,或者增添内容,等等。


同时,写作可以不断训练你的文字表达能力,当你写得越多的时候,很多复杂的东西,你都能用简单的语言来讲述给别人听。

而且写作通常是需要大量阅读参考书籍的,这也会使你的阅读速度大幅度提高。


最后,推荐一下我的《FFmpeg原理》VIP版,售价 79.9 元,VIP版 一共提供 以下 4 种服务。

  1. VIP专属章节
  2. 作者一对一答疑,答疑范围仅限于本书内容
  3. 音视频俱乐部 社群
  4. PDF,EPUB 离线电子书(1700页)

详情请点击 FFmpeg原理VIP版购买 查看

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注