
1) 【一句话结论】采用云原生+边缘计算的分层架构,通过信令-媒体双通道结合QUIC协议、前向纠错(FEC)和抖动缓冲区优化,配合多活节点与冗余链路,实现<200ms低延迟和99.9%以上高可用。
2) 【原理/概念讲解】
老师:咱们先拆解“实时音视频系统”的核心逻辑——信令-媒体分离和端到端低延迟传输。信令层负责建立连接(如SDP协商、ICE候选),媒体层负责音视频流传输。
3) 【对比与适用场景】
| 方案 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| WebRTC | 基于Web的实时通信技术,支持P2P和SFU架构 | 低延迟(<200ms),端到端加密,自动ICE候选 | 直播课(P2P)、视频会议(SFU) | 需信令服务器,移动网络下P2P可能受限制 |
| SRT (SRTv4) | 基于RTP/RTSP的实时传输协议 | 支持前向纠错、丢包恢复,兼容传统流媒体 | 直播、视频会议(尤其需要高可靠性) | 需专用服务器,配置复杂 |
| RTMP | Adobe的实时流媒体传输协议 | 适合低延迟直播,但依赖TCP | 传统直播平台(如YouTube直播) | 高延迟(>200ms),不适用于移动网络 |
| 架构 | 定义 | 特性 | 场景 | 注意点 |
|---|---|---|---|---|
| 云原生架构 | 全部部署在云服务器(如AWS、阿里云) | 弹性伸缩,易管理,但延迟受网络影响 | 大规模直播(千级用户) | 需高带宽,移动网络延迟高 |
| 边缘计算架构 | 在用户附近部署边缘节点(如CDN节点) | 低延迟(<50ms),减少回程延迟 | 移动直播、本地会议 | 需边缘节点覆盖,成本较高 |
4) 【示例】
信令服务器(WebSocket)处理客户端连接,交换SDP和ICE候选:
// 客户端向信令服务器发送SDP
client.send({
type: "offer",
sdp: "v=0...a=...a=..."
});
// 信令服务器转发SDP给对方
server.on("message", (data) => {
const offer = JSON.parse(data);
client.send(JSON.stringify(offer));
});
媒体服务器(WebRTC)使用RTCPeerConnection建立连接,配置QUIC和FEC:
const peerConnection = new RTCPeerConnection({
iceServers: [
{ urls: "stun:stun.l.google.com:19302" },
{ urls: "stun:stun1.l.google.com:19302" }
],
transport: "udp" // 优先使用UDP
});
peerConnection.onicecandidate = (event) => {
if (event.candidate) {
// 发送ICE候选给信令服务器
}
};
peerConnection.ontrack = (event) => {
// 播放媒体流
};
5) 【面试口播版答案】
“面试官您好,针对支持直播课的实时音视频系统,核心方案是采用云原生+边缘计算的分层架构,通过信令-媒体分离和QUIC协议、前向纠错(FEC)等技术,配合多活节点和冗余链路,实现<200ms低延迟和99.9%以上高可用。具体来说:首先,网络架构分为三层——信令层(负责建立连接,如SDP协商)、媒体层(负责音视频流传输)、控制层(负责QoS和故障检测)。低延迟的关键技术包括:1. QUIC协议:基于UDP的多路复用和连接迁移,减少握手延迟(相比TCP的3次握手,QUIC只需1次);2. 前向纠错(FEC):在发送端将数据分片并附加冗余信息,接收端即使丢失部分数据也能恢复,避免重传导致的延迟;3. 抖动缓冲区优化:动态调整缓冲区大小,比如使用自适应抖动缓冲区算法,根据实时网络状况调整,平衡延迟和抖动。高可用方面,采用多节点部署(主节点+热备节点),通过心跳检测实现故障快速切换,冗余链路(主链路+备用链路)确保链路故障时无缝切换。比如,当主节点故障时,热备节点自动接管,用户感知不到延迟变化。这样就能满足直播课的低延迟和高可用需求。”
6) 【追问清单】
7) 【常见坑/雷区】