
1) 【一句话结论】直播系统因需支撑千级用户高并发实时流,UDP(如WebRTC)因低延迟、高并发能力更适配,通过RTP/RTCP机制结合丢包重传、抖动补偿等保证质量,而TCP的可靠性与拥塞控制会引入高延迟,不适合实时直播。
2) 【原理/概念讲解】TCP是面向连接的传输层协议,需三次握手建立连接,通过确认+重传(ACK+Retransmission)和拥塞控制(如慢启动、拥塞避免)保证数据可靠,但会引入额外延迟(如握手时间、滑动窗口调整、拥塞控制反馈)。UDP是无连接协议,直接封装数据报发送,无确认、重传,延迟低,但数据可能丢失。类比:TCP像“快递公司”(需确认收货、重发包裹,按顺序送达,但过程慢);UDP像“快递员直接扔包裹”(快,但可能丢失,需收件人自行处理)。
3) 【对比与适用场景】
| 特性 | TCP | UDP |
|---|---|---|
| 连接模式 | 面向连接(三次握手) | 无连接(直接发送) |
| 可靠性 | 可靠(确认+重传+拥塞控制) | 不可靠(不保证交付) |
| 延迟 | 较高(因握手、滑动窗口、拥塞控制) | 较低(无额外开销) |
| 流量控制 | 有(滑动窗口) | 无 |
| 拥塞控制 | 有(慢启动、拥塞避免) | 无 |
| 适用场景 | 需可靠传输的文件传输、HTTP | 实时流媒体(直播)、在线游戏 |
| 注意点 | 高并发下延迟高(慢启动/拥塞避免导致延迟剧增) | 数据可能丢失,需应用层处理;极端网络(丢包率极高、抖动极大)下质量下降 |
4) 【示例】(WebRTC中RTP/RTCP传输视频帧伪代码):
// 客户端(发送端):封装RTP包并发送
void sendVideoFrame(const char* frame, size_t size) {
struct rtp_header {
uint8_t version; // RTP版本
uint8_t padding;
uint8_t extension;
uint8_t csrc_count;
uint8_t marker;
uint16_t payload_type;
uint32_t sequence_number;
uint32_t timestamp;
uint32_t ssrc;
};
struct rtp_header hdr;
hdr.version = 2;
hdr.padding = 0;
hdr.extension = 0;
hdr.csrc_count = 0;
hdr.marker = 0;
hdr.payload_type = 96; // H.264视频
hdr.sequence_number = ++seq_num;
hdr.timestamp = ++ts_num;
hdr.ssrc = send_ssrc;
sendto(sockfd, (const char*)&hdr, sizeof(hdr), 0, (struct sockaddr*)&serverAddr, sizeof(serverAddr));
sendto(sockfd, frame, size, 0, (struct sockaddr*)&serverAddr, sizeof(serverAddr));
}
// 服务器(接收端):接收RTP包并解码
void receiveVideoFrame(int sockfd) {
char buffer[1500];
struct sockaddr_in clientAddr;
socklen_t addrLen = sizeof(clientAddr);
while (true) {
ssize_t bytes = recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)&clientAddr, &addrLen);
if (bytes > 0) {
struct rtp_header* hdr = (struct rtp_header*)buffer;
// 检查序列号连续性(处理丢包)
// 解码视频帧(如H.264解码)
processFrame(buffer + sizeof(hdr), bytes - sizeof(hdr));
}
}
}
(注:实际WebRTC中,RTCP传输控制信息,如发送端报告(SR)反馈丢包率、抖动,帮助客户端调整策略。)
5) 【面试口播版答案】(约90秒):
“面试官您好,直播系统需支撑千级用户高并发实时流,TCP和UDP的核心差异在于可靠性与延迟。TCP面向连接,通过三次握手、确认重传和拥塞控制(慢启动、拥塞避免)保证可靠,但会引入高延迟(如握手时间、滑动窗口调整),高并发下延迟可能达到数百毫秒,严重影响实时体验。UDP无连接,延迟低(几十毫秒内),适合实时流,但数据可能丢失。好未来采用基于UDP的WebRTC,通过RTP传输视频/音频数据(保证实时性),RTCP传输控制信息(如丢包率、抖动),结合应用层机制保证质量。针对UDP不可靠性,设计机制包括:1. 丢包重传:对关键帧(如I帧)用前向纠错码(如RS码,码率1/2,能纠正1位错误),对非关键帧(P/B帧)选择性重传,避免频繁重传影响实时性;2. 抖动补偿:通过抖动缓冲区(Jitter Buffer),根据RTCP报告的抖动数据动态调整缓冲区大小,抖动大时增大缓冲区减少卡顿,抖动小时减小缓冲区降低延迟;3. QoS自适应:结合网络带宽(RTCP反馈),动态调整视频编码码率(如ABR),低带宽下降低码率保持流畅。总结:UDP的低延迟与高并发能力,加上WebRTC的RTP/RTCP机制,能支撑千级用户直播,同时通过丢包重传、抖动补偿保证视频质量。”
6) 【追问清单】
7) 【常见坑/雷区】