课程 · 系列目录
RTC 实时音视频入门
从一通语音电话开始,逐步理解实时音视频的时间约束、声音处理、网络传输和弱网恢复,再进入连接建立与实际通话实验。
Hex4C59 3 分钟阅读 更新于 2026-10-15
软件工程·原创·概念与设计
7 章开始阅读 →
这个系列面向第一次学习实时音视频的读者,不要求先掌握网络协议或编解码。每篇围绕一个完整问题,把相关机制、数据计算和处理过程放在一起,再用可复现实验检查结论。纯模型的结果与真实编解码输出会分别注明,避免把教学参数当作产品表现。
阅读正文只需要基本的加减乘除。先按顺序理解例子,再合上答案做每篇的新条件练习。遇到报头字节、位运算或编解码接口时,可以按文中的提示稍后回看;它们用于进一步理解实现,不是完成基础判断的前提。
可复现实验需要另外准备运行环境:前六篇的基础实验脚本使用 Python 3.9+;第二篇可选的真实编解码需要 FFmpeg,第四篇则需要可单独加载的 libopus。没有这些环境,也可以先完成正文与纸面练习。当前七篇先学习语音链路中的时间、数据、恢复、发送预算和收发记录,再理解连接建立。第七篇的浏览器实验只传测试文本,后续再加入真正的媒体轨道。
| 读完哪一篇 | 应当能够独立完成什么 |
|---|---|
| 01 | 根据到达、处理和播放时刻,算出还能等多久,并解释增加缓冲的代价 |
| 02 | 从时长和 PCM 格式计算样本数、字节数,分清原始声音与压缩负载 |
| 03 | 对一段新收包记录分别判断重复、乱序、迟到和到期缺失 |
| 04 | 检查可用信息与剩余时间,说明重传、FEC、PLC 各自能做什么 |
| 05 | 统一发送预算,判断队列增长与回落,分清减少产出和发送平滑 |
| 06 | 计算收发间隔差,区分相邻变化、持续增长与未知的绝对延迟 |
| 07 | 分清信令、候选、已选路径和实际数据,用连接记录确定下一步检查位置 |
当前文章 #
- 01:实时通话为什么不能一直等:沿声音路径计算延迟预算,用时间图比较缓冲、迟到与恢复的取舍。
- 02:声音从麦克风到扬声器:跟踪同一段声音的样本、字节和块长变化,用合成音运行真实 Opus 编解码实验。
- 03:从一段收包记录读懂 RTP:从乱序声音引出序号和时间戳,先判断收包与播放,再读报头、统计与打包开销。
- 04:丢包后,重传、FEC 和 PLC 怎么选:先理解冗余恢复与替代输出,比较同一期限下的恢复路径,再用真实 libopus 正反例核对。
- 05:带宽没跟上,声音为什么越排越晚:算完整包预算,比较排队增长、停止和回落,用交互曲线与逐包模型检查发送等待。
- 06:怎样从收发记录看出延迟在增长:配对收发记录,计算间隔差和相对变化,检查尖峰、发送前排队、时钟误差与乱序。
- 07:两端怎样找到能通话的网络路径:从地址与 NAT 讲到信令、ICE 和中继,再用本机浏览器观察候选、已选路径和数据回传。
后续方向 #
接下来进入双端通话实验,把媒体轨道接到已建立的路径上,分别核对采集、收发、解码与实际输出。后续再把接收反馈、发送调整和实际队列变化放到一起核对,继续讨论视频编码、音画同步与多人通信。篇章会按实际写作进展拆分,完成的文章再加入目录。
一起讨论
选中正文中的文字,可以针对这段内容发起讨论。
正在读取讨论…
在 GitHub 查看与管理讨论 ↗