音视频学习路线

一、先给你一张“全局脑图”(非常重要)

一帧视频从 Sensor 到对端播放器,完整链路是:

 
Sensor ↓ ISP ↓ Raw / YUV ↓ Encoder (H.264 / H.265) ↓ Encoded bitstream (NALU) ↓ Packetizer (RTP) ↓ Network (UDP / TCP) ↓ Depacketizer ↓ Decoder ↓ Renderer / Display

👉 视频“传输”真正从 Encoder 输出开始
👉 你要学的是:中间每一段在干什么、为什么要这样设计


二、完整学习路径(你可以按章节啃)

我按 8 大阶段给你拆解,每一阶段我都会说明:

  • ✅ 学什么

  • ❌ 不用纠结什么

  • 🎯 工程中你要“会到什么程度”


第一阶段:视频基础(必须过,但不用深)

1️⃣ 像素 & 图像基础

你需要理解:

  • 像素是什么

  • 分辨率、帧率

  • RGB vs YUV

  • 为什么视频系统一定用 YUV

🎯 工程目标:

看到 NV12 / YUV420,你知道它在内存里怎么排


2️⃣ YUV 全家桶(你已经在学了)

重点掌握:

  • YUV444 / 422 / 420 的采样本质

  • NV12 / NV21 / I420 / YU12 的内存布局

  • 为什么 ISP 输出几乎都是 NV12

🎯 工程目标:

能正确告诉 DMA / Encoder:stride、plane、format


第二阶段:Sensor & ISP(决定“源头质量”)

3️⃣ Sensor 输出到底是什么?

你要搞清楚:

  • MIPI CSI-2 是传输协议

  • Sensor 输出是 Bayer RAW

    • RGGB / BGGR / GRBG

  • Sensor 本身不输出 YUV(99% 情况)

🎯 工程目标:

知道 RAW ≠ 图像,必须过 ISP 才“能看”


4️⃣ ISP 在干什么?

ISP 的工作链路:

 
RAW → Demosaic → AWB → AE → Gamma → Color Correction → Noise Reduction → YUV

🎯 工程目标:

知道 ISP 是“画质之王”,不是简单转换格式


第三阶段:视频编码(H.264 / H.265 核心)

⚠️ 这是你作为流媒体工程师的核心技能区


5️⃣ 编码器到底干了什么?

你要理解:

  • 编码 ≠ 压缩图片

  • 编码是:

    • 空间压缩(帧内)

    • 时间压缩(帧间)

核心概念:

  • GOP

  • I / P / B 帧

  • 参考帧

  • 运动估计

🎯 工程目标:

知道“为什么 B 帧一定增加延迟”


6️⃣ H.264 码流结构(非常重要)

你需要系统理解:

码流层级

 
Sequence (SPS) └─ Picture (Frame) └─ Slice └─ Macroblock

NALU 是什么?

 
| Start Code | NAL Header | Payload |
  • SPS / PPS / IDR / Slice

  • Annex-B vs AVCC

🎯 工程目标:

能从一段裸码流中拆出 NALU,并判断关键帧


第四阶段:封包(从“码流”到“能发出去”)

7️⃣ 为什么不能直接把 H.264 往网络一丢?

问题:

  • MTU 限制(1500 字节)

  • 丢包

  • 顺序错乱

解决方案:

👉 RTP(Real-time Transport Protocol)


8️⃣ RTP 是怎么封 H.264 的?

你要学:

  • RTP Header(12 字节)

  • Sequence Number

  • Timestamp

  • SSRC

H.264 over RTP:

  • Single NALU

  • FU-A(分片)

  • STAP-A(聚合)

🎯 工程目标:

会抓包,看 Wireshark 知道一帧怎么被拆成多个 RTP 包


第五阶段:信令(RTSP / WebRTC)

9️⃣ RTSP 是干嘛的?

RTSP ≠ 传视频
RTSP 是:

  • SETUP

  • PLAY

  • PAUSE

  • TEARDOWN

🎯 工程目标:

知道 SDP 里描述了什么(payload type、fmtp)


10️⃣ SDP 你要看懂哪些字段?

重点字段:

 
m=video 5004 RTP/AVP 96 a=rtpmap:96 H264/90000 a=fmtp:96 packetization-mode=1; sprop-parameter-sets=...

🎯 工程目标:

知道 SPS/PPS 怎么通过 SDP 给播放器


第六阶段:接收端(解码 & 显示)

11️⃣ 解封包流程

 
UDP → RTP → 重组 NALU → 解码器

你要理解:

  • 丢包怎么处理

  • P / B 帧丢了会发生什么


12️⃣ 解码器在等什么?

解码器需要:

  • SPS

  • PPS

  • IDR

🎯 工程目标:

知道“为什么丢了 SPS,画面直接黑”


第七阶段:工程级问题(IPC / 运动相机必会)

13️⃣ 延迟从哪里来?

延迟来源:

  • B 帧

  • 编码缓存

  • RTP jitter buffer

  • 解码 reorder buffer

🎯 工程目标:

能设计 低延迟模式(< 200ms)


14️⃣ 丢包 & 抖动怎么办?

策略:

  • FEC

  • 重发(TCP / WebRTC)

  • IDR 插入

  • GOP 控制


第八阶段:实战能力(你最终要达到)

你最终应该能做到:

  • ✅ 手写一个 H.264 RTP Sender

  • ✅ 用 Wireshark 判断:

    • I 帧

    • FU-A

    • 丢包位置

  • ✅ 调编码参数控制:

    • 码率

    • 延迟

    • 画质

  • ✅ Debug:

    • 花屏

    • 绿屏

    • 马赛克

    • 首帧慢

posted @ 2026-01-16 15:48  一个不知道干嘛的小萌新  阅读(2)  评论(0)    收藏  举报