📦 先理解:两种"快递方式"

网络传输的基础:TCP vs UDP

所有网络传输都建立在这两种方式之上,就像所有快递都分为"签收"和"不签收":

📬

TCP = 顺丰签收

✅ 保证送达
✅ 保证顺序
✅ 丢了会重发
👍 可靠,不丢件
👎 慢,要等确认
📮

UDP = 扔信箱

❌ 不保证送达
❌ 不保证顺序
❌ 丢了就丢了
👍 快,不等待
👎 可能丢包
💡 实时语音为什么用UDP?

打电话时,如果一个字没听清,你会说"啥?再说一遍",而不是等快递员把丢的那个字补发过来。

实时性比完整性更重要——所以语音/视频通话都用UDP!

🔧 主流音频传输协议

📡
RTP
实时传输协议

VoIP的基础协议,在UDP上加了时间戳和序号,让接收方知道顺序。

<50ms
延迟
UDP
基于
用于:
📞 VoIP电话 📹 视频会议
🌐
WebRTC
网页实时通信

浏览器内置!不用装插件就能视频通话,自动处理NAT穿透、加密、回声消除。

<500ms
延迟
P2P
连接
用于:
💬 微信网页版 🎮 Discord 📹 Google Meet
📺
RTMP
直播推流协议

Adobe开发的直播协议,主播推流到服务器用这个。基于TCP,稳定可靠。

1-3s
延迟
TCP
基于
用于:
🎬 OBS推流 📺 B站直播 🎮 斗鱼/虎牙
🍎
HLS
HTTP直播流

苹果发明的,把视频切成小片用HTTP传输。兼容性最好,CDN友好。

10-30s
延迟
HTTP
基于
用于:
📱 手机视频 🎵 网易云音乐 📺 YouTube
🔌
WebSocket
双向实时通道

浏览器和服务器之间的"电话线"。虽然基于TCP很可靠,但一旦丢包会**卡顿等待**,不适合极高要求的实时通话。

较低
延迟
TCP
基于
用于:
🤖 智能音箱 💬 文字聊天 🎮 游戏信令
💡 深度思考:为什么不用 WebSocket 打电话?

WebSocket 看起来又快又稳,但它基于 TCP,有一个致命弱点:队头阻塞

想象一下:你在看直播,WebSocket 就像是一个严格的列队。如果中间第 5 个包丢了,TCP 会暂停所有后续包(6, 7, 8...)的播放,直到第 5 个包重传成功。这会导致画面/声音突然卡死,然后快速快进。

相比之下:WebRTC (UDP) 就像“本来就是糊弄”。第 5 个包丢了?没关系,直接扔掉,继续播第 6 个。虽然瞬间有点瑕疵,但绝不卡顿,保证了流畅性。

⏱️ 延迟对比一览

协议 延迟 可靠性 适合场景
📡 RTP <50ms 可能丢包 实时通话
🌐 WebRTC <500ms 自动补偿 浏览器通话
📺 RTMP 1-3s 可靠 直播推流
🍎 HLS 10-30s 非常可靠 点播/大规模直播
🔌 WebSocket 较低 (有抖动) 可靠 (会卡顿) 信令/文字/IoT

🎯 什么场景用什么协议?

📞
语音通话
WebRTC / RTP
延迟要低
📹
视频会议
WebRTC
P2P省带宽
🎬
直播推流
RTMP
稳定可靠
📺
直播观看
HLS / DASH
兼容性好
🎵
音乐播放
HLS / HTTP
质量优先
🤖
智能设备
WebSocket
灵活可控

🎬 直播的完整链路

🎤 主播
OBS推流
RTMP
🖥️ 服务器
↓ 转码分发
🖥️ CDN
HLS
📱 观众A
💻 观众B
📺 观众C
💡 为什么推流用RTMP,观看用HLS?

RTMP延迟低,适合主播实时上传;HLS兼容性好,任何设备都能看,还能利用CDN缓存。

✅ 本章小结

  • TCP vs UDP:TCP可靠但慢,UDP快但可能丢包
  • RTP:VoIP基础,给UDP加时间戳
  • WebRTC:浏览器内置,P2P实时通信
  • RTMP:直播推流,TCP可靠
  • HLS:直播观看/点播,兼容性最好
  • WebSocket:双向通道,IoT常用
← VoIP与实时语音 音频硬件入门 →