音视频工程长期写作总纲:我的知识体系骨架与专栏线路图

前言:为什么我要先搭“骨架”,而不是继续零散写

当一个人开始系统学习音视频时,很容易进入一种状态:

  • 今天看一点 H.264
  • 明天看一点 FFmpeg
  • 后天又跳去看 RTSP / RTP
  • 再往后开始接触 OpenCV、GStreamer、CUDA、WebRTC、AAC、弱网优化

表面上看,学过的东西越来越多;但实际上,知识很容易变成一地散点。

最后常见的问题是:

  • 每个词都见过,但串不起来
  • 每个模块都懂一点,但没有主干
  • 写博客时题目很多,但容易越写越散
  • 面试时能说几个名词,但很难讲出完整链路
  • 做项目时遇到问题,不知道它属于采集层、编码层、协议层、渲染层,还是系统优化层

所以,在这个阶段,比继续堆选题更重要的一件事是:

先把整个音视频工程知识体系的核心骨架定下来。

这篇文章的目的不是讲某一个具体技术点,而是作为我后续长期写作的总纲,明确:

  1. 这个专栏到底要覆盖哪些方向
  2. 哪些内容属于核心骨架,必须优先写透
  3. 每篇文章的跨度应该怎么控制,避免一篇里塞太多东西
  4. 后续所有笔记、博客、图示、代码示例,应该沿着什么主线持续扩展

我希望这不是一个“随手写博客”的系列,而是一套能不断生长的音视频工程知识地图。


一、这个专栏到底在写什么

这个专栏的核心目标,不是简单整理 API,也不是只做面试八股,而是围绕 音视频工程全链路,逐步建立一套能够服务于:

  • 基础学习
  • 工程理解
  • 项目实践
  • 面试表达
  • 后续深入研究

的长期知识体系。

为了避免体系失控,我先给这个专栏设定一个明确边界。

1.1 专栏主线

整个专栏围绕下面这条主链路展开:

flowchart LR
    A[采集设备 / 本地文件 / 网络流] --> B[图像与音频基础]
    B --> C[编码与码流结构]
    C --> D[封装与解封装]
    D --> E[传输协议与网络]
    E --> F[解码 / 渲染 / 播放]
    F --> G[工程框架与工具]
    G --> H[系统优化 / 弱网 / 实时性]
    H --> I[车载 / 推理 / SDK / 项目表达]

换句话说,这个专栏不是单讲 FFmpeg,也不是单讲 H.264,而是把下面这些方向放进同一个系统里理解:

  • 图像基础与像素格式
  • 视频编码与音频编码
  • 封装格式与媒体容器
  • RTSP / RTP / RTMP / WebRTC
  • FFmpeg / GStreamer
  • 摄像头采集链路与车载视频链路
  • 硬件编解码、OpenGL、CUDA、ONNX Runtime
  • jitter buffer、弱网优化、系统性能调优
  • 面试表达、项目表达、SDK 设计与落地

1.2 写作原则

后续所有文章,都尽量遵守下面三个原则。

原则一:一篇只解决一个核心问题

一篇文章可以有关联内容,但不应该跨度过大。

比如:

  • “RTSP / RTP / RTCP 三者关系”可以是一篇
  • “WebRTC 全栈原理 + 弱网优化 + jitter buffer + 回声消除”就明显太大了

原则二:先搭骨架,再填细节

先把主干主题写出来,让整张知识地图可见;再逐篇深入,补:

  • 关键代码
  • 架构图
  • 时序图
  • 典型问题
  • 性能分析

原则三:每篇都尽量落回工程语境

不只回答“它是什么”,更要回答:

  • 它在整条链路里处于哪一层
  • 它和上下游模块怎么连接
  • 工程里为什么经常在这里出问题
  • 面试里该怎么讲

二、整个体系先分成哪几大模块

在真正细化文章之前,先把大模块划清楚。

我最终决定把整个专栏先收成下面 10 个一级模块

这样既足够大,也不会无限发散。

模块 A:总览与系统世界观

  • 音视频系统整体链路
  • 从采集到显示的完整主线
  • 各层模块职责与系统边界

模块 B:图像基础、像素格式与色彩空间

  • RGB / YUV / NV12 / YUV420P
  • 色彩空间、采样格式、内存布局
  • OpenCV / FFmpeg / 摄像头数据格式衔接

模块 C:视频编码与码流结构

  • H.264 / H.265
  • I/P/B 帧、GOP、预测结构
  • NALU、SPS、PPS、VPS、Annex B、AVCC

模块 D:音频基础与音频编码

  • PCM、采样率、位宽、声道
  • AAC、Opus 等音频编码
  • 音视频同步与音频处理基础

模块 E:容器、封装与时间戳

  • MP4 / FLV / TS / MKV
  • mux / demux
  • PTS / DTS / time_base
  • 转封装与转码

模块 F:流媒体网络与传输协议

  • RTP / RTCP / RTSP
  • RTMP
  • WebRTC
  • jitter buffer、弱网与实时传输问题

模块 G:FFmpeg 与 GStreamer 工程框架

  • FFmpeg 核心对象与主流程
  • filter graph
  • GStreamer pipeline
  • 两套框架的工程思维差异

模块 H:采集设备、Camera Pipeline、车载系统与业务链路

  • 本地摄像头采集链路
  • Camera pipeline 搭建
  • Sensor 调试与图像链路联调
  • 录像、拍照、回放等典型业务
  • 车载摄像头主链路与附属链路
  • SDK 开发与平台封装

模块 I:硬件加速、GPU、渲染与推理部署

  • 软编码 / 硬编码
  • 显卡支持差异
  • CUDA / OpenGL / ONNX Runtime
  • 视频流上的推理部署

模块 J:链路优化、弱网与项目表达

  • 弱网优化
  • jitter buffer
  • 缓冲区 / 队列 / 背压
  • 面试表达
  • 项目系统设计与复盘

这 10 个模块,已经足以覆盖我后续希望长期沉淀的主体方向。

但模块只是地图,真正决定写作节奏的,还是下面的 核心骨架文章


三、什么叫“核心骨架文章”

这里我专门定义一下。

所谓核心骨架文章,指的是:

  • 它本身是一个关键枢纽主题
  • 它能连接多个后续主题
  • 它的跨度不能过大,但要足够基础、足够关键
  • 它写完之后,后面的细分文章就有了明确落点

换句话说,骨架文章不是“把所有东西一篇讲完”,而是:

先把柱子立起来。

后面更细的内容,比如:

  • RTX 30/40 系列 NVENC 差异
  • WebRTC 带宽估计算法
  • AAC ADTS 头解析
  • 某款摄像头 SDK 封装细节

都应该挂靠在这些主柱上,而不是一开始就散着写。


四、第一阶段必须先写稳的核心骨架

我希望这套专栏后续很大,但第一阶段不应该先全面铺开,而要先把最重要的主干定稳。

我把第一阶段的核心骨架,收成 16 篇主文章

它们的特点是:

  • 主题明确
  • 单篇跨度可控
  • 能形成完整主干
  • 后续可以自然拆出更多支线

下面按模块给出正式题目。


A 组:总览与系统认知骨架

1. 如果面试官问你视频从采集到显示,你该怎么讲

定位: 全专栏总入口文章。
作用: 建立整条视频链路的整体画面,后续所有主题都可以回链到这篇。
不宜扩太大: 不展开算法细节,不深挖协议细节,不深入具体 API。

2. 音视频系统到底在处理什么:从数据形态到工程链路的整体认知

定位: 总览补强篇。
作用: 讲清原始数据、压缩数据、封装数据、网络传输数据、解码后数据分别是什么。
不宜扩太大: 不代替具体编码篇或协议篇。


B 组:图像基础与像素格式骨架

3. 从像素格式到色彩空间,系统理解 RGB、YUV、NV12 与 YUV420P

定位: 图像基础核心骨架。
作用: 统一解释像素格式、色彩空间、采样方式和常见工程格式。
不宜扩太大: 不深入 HDR、色彩管理全体系,不展开 GPU 渲染。

4. 为什么视频系统普遍偏爱 YUV:从采样、存储到编码输入的工程取舍

定位: 上一篇的补强与工程解释篇。
作用: 讲清 RGB 与 YUV 在视频工程里的根本差异。
不宜扩太大: 不展开编码器算法,不展开 OpenCV 全部色彩转换。


C 组:视频编码核心骨架

5. 从原始视频到压缩码流,彻底理解 H.264/H.265 的基础知识

定位: 编码基础篇。
当前状态: 已完成。
作用: 建立编码世界观。

6. 一文讲清 I 帧、P 帧、B 帧、GOP 与视频预测结构

定位: 预测结构独立骨架篇。
作用: 把 I/P/B 与 GOP 从“大而全的编码篇”里拆出来单独讲透。
不宜扩太大: 不展开 NALU、SPS/PPS、Annex B。

7. 从分块到 NALU,一文讲清 H.264/H.265 的编解码流程与码流结构

定位: 编解码流程核心篇。
当前状态: 已完成。
作用: 把流程和码流结构串起来。

8. SPS、PPS、VPS、Annex B、AVCC 到底是什么关系

定位: 码流组织独立骨架篇。
作用: 专门解决码流组织与参数集问题。
不宜扩太大: 不讲完整网络协议,不讲完整封装层。


D 组:音频基础骨架

9. 音频系统基础入门:采样率、位宽、声道数与 PCM 到底怎么理解

定位: 音频地基篇。
作用: 给整个专栏补齐音频底层认知。
不宜扩太大: 不展开 AAC 内部编码算法。

10. AAC 在音视频工程中的位置:从 PCM 到压缩音频的主线理解

定位: 音频编码骨架篇。
作用: 让专栏具备完整音视频链路,不再只有视频没有音频。
不宜扩太大: 不扩展 Opus/WebRTC 语音细节。


E 组:封装与时间戳骨架

11. 什么是容器,什么是码流:MP4、FLV、TS 与裸流不要再混了

定位: 封装层核心骨架。
作用: 解决“码流”和“容器”混淆问题。
不宜扩太大: 不展开完整 RTP 封装细节。

12. FFmpeg 时间戳体系入门:PTS、DTS、time_base 到底怎么理解

定位: 时间戳骨架篇。
作用: 这是后面 FFmpeg、封装、B 帧、弱网、同步问题的总入口。
不宜扩太大: 不讲完整同步算法。


F 组:协议与传输骨架

13. RTP、RTCP、RTSP 三者到底是什么关系

定位: 实时传输协议骨架篇。
作用: 给实时流媒体打地基。
不宜扩太大: 不展开 WebRTC 整体框架,不深入 jitter buffer 算法。

14. RTMP 与 WebRTC 的核心区别:为什么它们适合完全不同的场景

定位: 直播与实时互动分野篇。
作用: 帮助建立对不同协议体系的场景认知。
不宜扩太大: 不深入 ICE/STUN/TURN 全细节。

15. jitter、丢包、乱序与 jitter buffer:弱网下实时音视频到底在对抗什么

定位: 弱网与实时性骨架篇。
作用: 后续所有弱网优化文章都挂在这里。
不宜扩太大: 不把全部 WebRTC 拥塞控制都塞进来。

16. 从本地摄像头到网络推流,一条最小视频链路怎么搭起来

定位: 协议、编码、封装、推流的综合落地骨架篇。
作用: 把采集、编码、封装、推流、播放串成第一条最小实战链路。
不宜扩太大: 不加入完整车载、多路 AI、复杂弱网适配。


G 组:FFmpeg 与 GStreamer 骨架

17. 从 AVPacket 到 AVFrame,H.264/H.265 在 FFmpeg 中是如何承上启下的

定位: FFmpeg codec 层骨架篇。
当前状态: 已完成。
作用: 连接编码知识与 FFmpeg 工程主线。

18. FFmpeg filter graph 入门:从 scale、fps、overlay 到完整滤镜链

定位: 滤镜链骨架篇。
作用: 解决 frame 层处理和 filter 思维问题。
不宜扩太大: 不深入复杂自定义 filter 开发。

19. GStreamer 的 pipeline 思维是什么:它和 FFmpeg 的差别到底在哪

定位: GStreamer 骨架篇。
作用: 建立第二套主流媒体框架的系统观。
不宜扩太大: 不一上来就讲复杂插件开发。


H 组:采集、Camera Pipeline、车载与工程场景骨架

20. 熟悉视频采集设备,到底需要理解哪些关键问题

定位: 采集设备认知骨架篇。
作用: 讲清采集设备、格式、驱动、缓存和链路衔接。
不宜扩太大: 不展开完整车载链路。

21. Camera Pipeline 是怎么搭起来的:从 Sensor 到图像输出的主链路

定位: Camera pipeline 核心骨架篇。
作用: 讲清 sensor、ISP、格式转换、缩放、编码前处理等模块关系,把 Camera 从“设备”提升到“系统链路”层来理解。
不宜扩太大: 不把具体厂商 ISP 细节和所有驱动接口全塞进来。

22. Sensor 调试到底在调什么:曝光、帧率、格式、时序与稳定性问题怎么定位

定位: Camera 联调骨架篇。
作用: 把 sensor 调试从“玄学经验”整理成结构化问题域。
不宜扩太大: 不展开每一家 sensor 芯片寄存器手册。

23. 录像、拍照、回放三条业务链路,到底该怎么拆开理解

定位: 典型视频业务骨架篇。
作用: 讲清录像、抓拍、回放虽然都围绕视频数据,但链路重点和系统约束完全不同。
不宜扩太大: 不把播放器内核和完整文件系统实现全讲进去。

24. 车载摄像头视频链路是怎么跑起来的

定位: 车载方向核心骨架篇。
作用: 打出你自己的辨识度,把通用音视频知识拉回你的业务场景。
不宜扩太大: 不把所有车载产品形态和 AI 任务都塞进来。

25. 为什么音视频系统特别强调队列、缓冲区和背压机制

定位: 系统工程骨架篇。
作用: 解决“会写功能但不懂系统稳定性”的问题。
不宜扩太大: 不展开完整操作系统调度细节。


I 组:硬件加速、GPU 与推理骨架

26. 软编码和硬编码到底差在哪,不只是速度问题

定位: 编码实现路线骨架篇。
作用: 建立软编/硬编/延迟/画质/资源的 trade-off 认知。
不宜扩太大: 不展开所有厂商 API 细节。

27. 为什么不同型号显卡支持不一样:硬件编解码能力到底由什么决定

定位: 显卡能力差异骨架篇。
作用: 把 NVENC / NVDEC / QSV / VAAPI 等路线的差异认知立起来。
不宜扩太大: 不深入每一代显卡参数表。

28. 从视频帧到推理结果,OpenCV、CUDA、ONNX Runtime 怎么串成一条链路

定位: 视频 AI 工程骨架篇。
作用: 把视频处理、GPU、推理部署三块接起来。
不宜扩太大: 不把模型训练内容塞进来。


五、为什么核心骨架先定这 25 篇

看到这里,可能会觉得 25 篇还是很多。

但如果从整个音视频工程的大图来看,这 25 篇其实已经是刻意压缩后的结果。

因为它们刚好覆盖了下面这些真正不可缺的主柱:

  • 总览与系统链路
  • 图像基础
  • 视频编码
  • 音频基础
  • 容器与时间戳
  • 实时协议与弱网
  • FFmpeg / GStreamer
  • 采集与车载
  • 硬编硬解与推理部署

更重要的是,它们的粒度已经尽量控制在:

  • 一篇能讲透一个核心问题
  • 又不会小到只剩一个零散知识点

所以从长期专栏角度,这一批足够像“主干”。

后续所有更细的文章,都可以作为这些骨架文章的支线继续展开。


六、核心骨架确定后,后续支线怎么长出来

骨架文章先写稳,不代表后面不深入。相反,后面真正深入的内容,应该作为“二级支线”继续长出来。

例如:

围绕第 15 篇,可以继续拆出:

  • jitter buffer 的基本算法设计
  • 自适应 jitter buffer 的思路
  • WebRTC 弱网恢复常见机制
  • 丢包、乱序、重传、NACK、FEC 的工程取舍

围绕第 18 篇,可以继续拆出:

  • FFmpeg 中 scale 滤镜详解
  • overlay 和 drawtext 的工程用法
  • filter graph 中多输入多输出怎么走
  • 硬件 filter 与软件 filter 的数据流差异

围绕第 21 篇,可以继续拆出:

  • 车载系统中的录像链路
  • 车载系统中的预览链路
  • 抓拍与 AI 分析链路如何并行
  • 车载视频系统的主链路与附属链路拆分

围绕第 25 篇,可以继续拆出:

  • ONNX Runtime C++ 推理部署实践
  • OpenCV 与 CUDA 图像预处理优化
  • 视频流上的目标检测链路设计
  • 推理结果叠加显示的渲染路径

也就是说,骨架不是终点,而是目录树的一级节点。


七、后续写作时的统一约束条件

为了让这个专栏持续写下去时不散,我给自己定一套统一约束。

7.1 每篇文章尽量回答 6 个问题

  1. 这个主题在整个音视频系统里处于哪一层
  2. 它解决什么问题
  3. 它和上下游模块怎么连接
  4. 工程里通常怎么落地
  5. 常见坑是什么
  6. 面试里该怎么讲

7.2 每篇至少包含以下内容中的 2 类以上

  • 架构图
  • 时序图
  • 关键代码片段
  • 常见问题排查图

7.3 每篇尽量采用统一结构

  • 前言
  • 问题背景
  • 核心概念
  • 主链路分析
  • 工程落地
  • 常见问题
  • 面试表达
  • 总结

7.4 优先写“高串联、高复用、高辨识度”的主题

优先级判断标准:

  • 能连接多个模块的,优先
  • 能服务面试表达的,优先
  • 能体现你的方向特色的,优先
  • 能自然延展出支线专题的,优先

7.5 文章之间尽量互相引用

这样整个专栏最终会更像一个知识网络,而不是单篇合集。


八、第一阶段的实际写作顺序建议

虽然核心骨架已经定了,但实际写作仍然需要有节奏。

如果按“先搭地基,再搭主干,再进入工程深化”的思路,我建议第一阶段优先按下面顺序推进。

第一批,先把总入口和最关键基础打稳

  1. 如果面试官问你视频从采集到显示,你该怎么讲
  2. 从像素格式到色彩空间,系统理解 RGB、YUV、NV12 与 YUV420P
  3. 一文讲清 I 帧、P 帧、B 帧、GOP 与视频预测结构
  4. 什么是容器,什么是码流:MP4、FLV、TS 与裸流不要再混了
  5. FFmpeg 时间戳体系入门:PTS、DTS、time_base 到底怎么理解

第二批,把实时传输主线搭起来

  1. RTP、RTCP、RTSP 三者到底是什么关系
  2. RTMP 与 WebRTC 的核心区别:为什么它们适合完全不同的场景
  3. jitter、丢包、乱序与 jitter buffer:弱网下实时音视频到底在对抗什么
  4. 从本地摄像头到网络推流,一条最小视频链路怎么搭起来

第三批,把工程辨识度打出来

  1. FFmpeg filter graph 入门:从 scale、fps、overlay 到完整滤镜链
  2. Camera Pipeline 是怎么搭起来的:从 Sensor 到图像输出的主链路
  3. Sensor 调试到底在调什么:曝光、帧率、格式、时序与稳定性问题怎么定位
  4. 录像、拍照、回放三条业务链路,到底该怎么拆开理解
  5. 车载摄像头视频链路是怎么跑起来的
  6. 软编码和硬编码到底差在哪,不只是速度问题
  7. 从视频帧到推理结果,OpenCV、CUDA、ONNX Runtime 怎么串成一条链路

这样推进,会比无差别铺开更稳。


九、这篇总纲在整个专栏中的位置

这篇文章本身不会去深入讲某个具体技术点。

它真正的作用,是成为后续整个音视频工程专栏的“目录页”和“路线约束”。

此外,Camera 这一大块后续我也会单独作为重点分支持续扩展,尤其包括:

  • Camera pipeline 搭建
  • Sensor 调试与联调方法
  • ISP 前后图像链路理解
  • 录像、拍照、回放三类业务链路拆分
  • Camera 与编码、推流、AI 分析之间的衔接

后面再写新的文章时,我都可以回到这篇看两件事:

  1. 这个新题目属于哪根主骨架
  2. 它应该是骨架文章,还是某一骨架下的支线深化文章

这样一来,后续不管是写:

  • RTSP
  • RTMP
  • WebRTC
  • GStreamer
  • AAC
  • OpenGL
  • CUDA
  • ONNX Runtime
  • 车载摄像头链路
  • SDK 开发
  • 弱网优化

都不会再是“临时起意写一篇”,而是在同一张地图里继续填图。


总结

如果后续这个专栏真的要一直写下去,那么最重要的一步,不是先把所有主题都写出来,而是先把主干定住。

这篇文章做的,就是这件事。

我最终把整个音视频工程长期专栏,先收敛成:

  • 10 个一级模块
  • 28 篇核心骨架文章
  • 一套统一的写作约束条件
  • 一套分阶段推进的写作顺序

后面所有更细的内容,都应该挂靠在这些骨架文章之下,持续扩展。

如果说之前的几篇文章是在“局部开工”,那么从这篇开始,这个系列才算真正进入:

按体系长期建设。


音视频工程长期写作总纲:我的知识体系骨架与专栏线路图
https://breaker505.github.io/2026/03/10/audio-video-series-roadmap/
作者
爱发呆的鱼
发布于
2026年3月10日
许可协议