音视频开发实战
📺 音视频开发实战:从播放器到连麦
一本让你从 C++ 开发者成长为音视频工程师的实战教程
目标平台:Linux / macOS(仅 POSIX API,不支持 Windows)
🚀 快速开始
git clone https://github.com/chapin666/live-system-book.git
cd live-system-book/chapter-02
mkdir build && cd build && cmake .. && make -j4
ffmpeg -f lavfi -i testsrc=duration=10:size=640x480:rate=30 -pix_fmt yuv420p test.mp4
./player test.mp4环境准备:brew install ffmpeg sdl2 cmake
(macOS) 或
apt-get install ffmpeg libavformat-dev libsdl2-dev cmake
(Ubuntu)
📖 本书介绍
渐进式案例:「小直播」从 100 行代码逐步成长为生产级系统
单章产出:每章结束都有可运行的代码,不是纯理论
工业级标准:RAII、智能指针、详细错误处理、内置统计
全书完结:31章理论 + 11个实战项目 + 60+代码示例
📊 内容概览
Part 1:播放器基础 ✅ 已完成
| 章节 | 内容 | 简介 |
|---|---|---|
| Ch1 | 视频基础 | 视频压缩原理、YUV颜色空间、FFmpeg核心数据结构 |
| Ch2 | 第一个播放器 | 150行代码实现完整播放器,理解解封装→解码→渲染流程 |
| Ch3 | Pipeline 工程化 | 接口解耦、RAII资源管理、模块化架构设计 |
| P1 | 完整本地播放器 | 整合Ch1-3,实现播放控制、FPS显示、进度显示 |
| Ch4 | 为什么卡顿? | 性能分析方法、帧率预算、单线程瓶颈识别 |
| Ch5 | C++11 多线程 | thread/mutex/条件变量、线程安全队列实现 |
| Ch6 | 异步多线程播放器 | 解码与渲染分离、双缓冲队列、流畅播放原理 |
| P2 | 网络点播播放器 | 整合Ch4-6,实现HTTP播放、网络缓冲、断线重连 |
| Ch7 | 网络播放基础 | HTTP/HTTPS流播放、环形缓冲、下载策略 |
| Ch8 | 直播 vs 点播 | RTMP协议、直播拉流、追帧策略、延迟优化 |
| P3 | 直播观众端 | 整合Ch7-8,实现RTMP播放器、弱网对抗 |
| Ch9 | 硬件解码优化 | VideoToolbox/VAAPI/NVDEC、4K播放、功耗优化 |
| Ch10 | 音视频采集 | 摄像头/麦克风采集、跨平台设备访问 |
| Ch11 | 音频 3A 处理 | 回声消除(AEC)、降噪(ANS)、自动增益(AGC) |
| Ch12 | 编码与推流 | H.264编码原理、x264使用、RTMP推流实现 |
Part 2:主播端进阶 ✅ 已完成
| 章节 | 内容 | 简介 |
|---|---|---|
| Ch13 | 视频编码进阶 | H.265/AV1编码、SVC可伸缩编码、码率控制策略 |
| Ch14 | 高级采集技术 | 屏幕/窗口采集、多摄像头、画中画合成 |
| P4 | 采集与预览工具 | 整合Ch10-14,实现专业级采集预览工具 |
| Ch15 | 音频编码 | AAC/Opus编码、音频质量优化 |
| Ch16 | 美颜与滤镜 | FFmpeg滤镜链、GPU图像处理、磨皮美白 |
| P5 | 完整主播端 | 可开播的完整主播工具(采集→美颜→编码→推流) |
Part 3:实时连麦 ✅ 已完成
| 章节 | 内容 | 简介 |
|---|---|---|
| Ch17 | Socket网络编程 ⭐ 新增 | Socket API、UDP编程、字节序、数据序列化 |
| Ch18 | UDP与实时传输 | RTP/RTCP协议、JitterBuffer、拥塞控制基础 |
| Ch19 | NAT穿透与P2P | STUN/TURN/ICE协议、点对点连接建立 |
| P6 | P2P通话工具 | UDP/RTP/NAT穿透,双人音视频通话 |
| Ch20 | WebRTC标准 | DTLS/SRTP加密、DataChannel、信令协议设计 |
| Ch21 | WebRTC Native开发 | libwebrtc使用、音视频轨道管理、SDP协商 |
| P7 | WebRTC连麦客户端 | 1v1实时连麦,信令交互完整实现 |
| Ch22 | SFU转发服务器 | 选择性转发、Simulcast、GCC拥塞控制 |
| Ch23 | 多人房间管理 | 多路视频渲染、音量检测、布局管理 |
| P8 | 多人会议系统 | SFU转发,10人在线,多路渲染 |
Part 4:服务端架构 ✅ 已完成
| 章节 | 内容 | 简介 |
|---|---|---|
| Ch24 | MCU混音混画 | 音频混音算法、视频混画布局、GPU加速 |
| Ch25 | 录制与回放 | HLS/DASH协议、服务端录制、时移回放 |
| P9 | 录制回放系统 | MCU录制、HLS切片、HTTP回放服务 |
| Ch26 | 最新协议探索 | WebTransport、WHIP/WHEP、SRT/RIST |
| P10 | 完整服务端 | SFU/MCU/信令三合一服务端 |
Part 5:生产部署 ✅ 已完成
| 章节 | 内容 | 简介 |
|---|---|---|
| Ch27 | 质量监控体系 | Prometheus/Grafana、QoS指标、MOS评分 |
| Ch28 | 安全防护 | Token认证、内容审核、防重放攻击 |
| Ch29 | 性能调优 | 零拷贝、内存池、无锁队列、BBR拥塞控制 |
| Ch30 | Docker容器化 | 多阶段构建、镜像优化、Compose编排 |
| Ch31 | Kubernetes部署 | HPA自动扩缩容、灰度发布、服务网格 |
| P11 | 生产级部署 | Docker/K8s完整运维体系 |
🎯 学习路径
┌─────────────────────────────────────────────────────────────────┐
│ Part 1: 播放器基础 (2-3个月) ✅ 已完成 │
│ Ch1-3 → P1 → Ch4-6 → P2 → Ch7-9 → P3 → Ch10-12 │
│ 成果: 完整播放器 + 采集编码推流基础 │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ Part 2: 主播端进阶 (1.5-2个月) ✅ 已完成 │
│ Ch13-14 → P4 → Ch15-16 → P5 │
│ 成果: 专业主播工具(采集→美颜→编码→推流) │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ Part 3: 实时连麦 (2-3个月) ✅ 已完成 │
│ Ch17-18 → P6 → Ch19-20 → P7 → Ch21-22 → P8 │
│ 成果: WebRTC多人会议系统 │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ Part 4: 服务端架构 (1.5-2个月) ✅ 已完成 │
│ Ch23-24 → P9 → Ch25 → P10 │
│ 成果: 生产级服务端(SFU/MCU/录制) │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ Part 5: 生产部署 (0.5-1个月) ✅ 已完成 │
│ Ch26-28 → Ch29-30 → P11 │
│ 成果: Docker/K8s完整运维体系 │
└─────────────────────────────────────────────────────────────────┘
预计总时间:8-11 个月
📁 代码统计
| 类别 | 数量 | 说明 |
|---|---|---|
| 章节代码 | 60+ | Ch1-Ch30 每章配套示例 |
| 项目代码 | 11个 | P1-P11 完整可运行项目 |
| 头文件 | 21个 | 接口定义、类声明 |
| 源文件 | 40+ | 具体实现 |
| 配置文件 | 10+ | Docker/K8s/CMake |
| 图表 | 100+ | Mermaid/SVG 架构图 |
🗺️ 完整大纲
📄 OUTLINE.md — 查看全部 30 章详细规划
💡 核心概念速查
| 概念 | 一句话解释 | 类比 |
|---|---|---|
| Pipeline | 数据像水一样流动 | 工厂流水线 |
| PTS | 视频帧的”闹钟” | 告诉系统该何时显示 |
| YUV | 亮度与颜色分开存 | 黑白电视 + 调色板 |
| SFU | 选择性转发 | 快递分拣中心 |
| MCU | 混音混画 | 视频编辑合成 |
| ICE | NAT穿透框架 | 打洞专家 |
| WebRTC | 浏览器实时通信标准 | 视频通话SDK |
🛠️ 技术栈
- C++14/17 — 现代 C++,RAII、智能指针
- FFmpeg — 音视频处理行业标准
- SDL2 — 跨平台渲染
- CMake — 构建系统
- WebRTC — 实时通信
- Docker/Kubernetes — 容器化部署
📄 许可证
MIT License — 可自由用于学习或商业项目
🌟 如果对你有帮助,请点个 Star! !**