1.
概览与准备工作
- 目标:在台湾CN2链路上实现可复现的低延迟直播(端到端延迟≤1s至3s,或低于5s的容忍范围)。
- 前提设备:主播端编码器(OBS/硬编)、边缘直播服务器或CDN接入点、监测主机(可运行iperf3、mtr、ping)、具备BGP/路由配置权限的网络设备(若可控)。
- 先做:确认公网IP、测试时间窗口、记录时段(高峰/非高峰)以便对比。
2.
第一步:链路与路由诊断(实操步骤)
- 步骤1:使用ping测延迟与抖动:ping -c 100 <目标IP>,记录平均往返、最小/最大值与丢包率。
- 步骤2:使用mtr跟踪路径:mtr -rwzbc 100 <目标IP>,观察是否经过CN2节点(通常会有ChinaTelecom或CN2字样)与丢包突增点。
- 步骤3:带宽测试:iperf3 -c <目标IP> -t 60 -u -b 0(UDP无限制)或TCP模式,分别在不同时间段测试峰值与稳定带宽。
- 记录结果并保存为CSV以便后续对比。
3.
第二步:选择合适的传输协议
- 推荐:SRT或WebRTC用于端到端低延迟直播,SRT在有丢包时通过ARQ重传控制延迟与质量更平衡,WebRTC在浏览器直出场景更好。
- 实操:若使用SRT,设置-latency 120(ms)按需调整;若用WebRTC,调节SDP的max-bundle、RTCPeerConnection的iceTransportPolicy与RTCP反馈参数。
- 小提示:若链路丢包偶发,优先用SRT+FEC组合;浏览器兼容性选择WebRTC并开启RED/FEC。
4.
第三步:编码器设置(分辨率与码率)
- 基本规则:分辨率与帧率决定基础码率,推荐CQP或CBR近似模式保持带宽可预估。
- 参考码率:1080p/30fps 4–6 Mbps(CBR);720p/30fps 2–3 Mbps;480p 1–1.5 Mbps。
- 实操建议:设置keyframe间隔为2秒(SRT/WebRTC低延迟常用),GOP=2s,profile Main/High,preset为low-latency或veryfast以降低编码延时。
5.
第四步:计算带宽(上行、冗余与头部开销)
- 公式:所需上行 = 视频码率 + 音频码率 + 协议头开销 + FEC/冗余 + 安全余量。
- 具体数值示例:1080p 5 Mbps + 音频 128 kbps + UDP/IP/路由开销约8%(≈420 kbps) + FEC 10%(≈512 kbps)=> 总计≈6.06 Mbps。
- 建议留20%余量以应对瞬时抖动 => 6.06*1.2 ≈ 7.3 Mbps,故上行至少预留8 Mbps更稳妥。
6.
第五步:链路层与设备调优
- MTU与分片:确认MTU为1500或更高,若可用开启Jumbo Frame(9000)在受控网络中降低分片与延迟。
- TCP优化(若使用TCP):开启BBR或调大TCP窗口(sysctl net.core.rmem_max、wmem_max、net.ipv4.tcp_rmem/tcp_wmem)。
- QoS与流控:在网关上对直播流设置DSCP(EF或CS6)并保证排队规则优先,以避免排队延迟。
7.
第六步:BGP/路由与CN2优先级调整
- 若为客户可控BGP:与运营商沟通使用CN2直连或通过指定BGP community请求走CN2高品质链路。
- 验证:再次用mtr/tracepath确认路由路径是否切换至CN2;并对比延迟/丢包数据。
- 若不可控:选择已知在台湾有CN2对等的CDN/云厂商或落地节点(例如台湾/香港区域节点),避免跨多次海缆跳转。
8.
第七步:应用层优化(FEC、ARQ、缓冲)
- FEC配置:在SRT中启用FEC或在应用层用Reed-Solomon实现N:K冗余(常见10%–20%)。
- ARQ与重传:设置重传窗口与最大重传次数,若对延迟敏感减少重传次数并依赖FEC。
- 缓冲策略:端到端缓冲控制在100–300ms(实时低延迟场景);若网络波动大可临时扩大到500–1000ms。
9.
第八步:多路/多线容错与负载分担
- 多路径传输:使用SRT的多流或专用多链路聚合(Bonding)工具把流量分散到不同ISP路由以降低单链路故障概率。
- 实操:部署两个上行路径,使用mptcp或第三方Bonding(如Speedify/Managed Bonding)并按带宽权重分配。
- 注意:多链路会增加管理复杂度与可能的重排序,需在接收端处理重排。
10.
第九步:监控与自动化
- 必监指标:端到端延迟、抖动、丢包率、瞬时带宽使用、RTT分布。
- 工具与脚本:使用Prometheus+Grafana采集SRT/WebRTC统计、iperf3定时测、mtr定时探测并告警。
- 自动化策略:当丢包或延迟阈值触发时自动降低码率或切换到备用节点(Webhook/自动化脚本触发)。
11.
第十步:实战测试流程(逐项执行)
- 步骤A:在非直播时间进行基线测试(ping/mtr/iperf3),记录数据。
- 步骤B:按编码参数直播10分钟,监控端统计并记录延迟与丢包。
- 步骤C:在高峰时段重复,比较并调整码率或FEC以满足SLA(例如99%时间延迟低于3s)。
12.
带宽估算快速参考表(便于立刻应用)
- 单主播直出(不走CDN)参考:720p@30fps≈3 Mbps上行(含开销与FEC留4 Mbps);1080p@30fps≈5 Mbps(留6.5–8 Mbps)。
- 走CDN/分发:边缘上行按分发点计算,源站上行取一个原始流即可,CDN会处理复制;若自己做多播则需计算并发观众数×单流上行(非CDN场景)。
13.
问:在台湾CN2链路上,如何快速判断是否走的是CN2通道?
- 答:运行mtr或traceroute到目标IP并检查路径AS号或节点名称,若看到China Telecom、CN2或AS4134/AS4812相关跳数且延迟明显低于普通链路,则很可能是CN2;同时可与运营商确认BGP社区是否已标注走CN2。
14.
问:如何用iperf3实测得到可靠的带宽参考?
- 答:在目标端运行iperf3 -s,在源端执行iperf3 -c <目标IP> -t 60(TCP)与iperf3 -c <目标IP> -u -b 0 -t 60(UDP),分别在不同时间段多次测试并取中位数,同时观察丢包与抖动,结合直播编码码率来决定上行保留。
15.
问:如果出现瞬时丢包但总体延迟仍可接受,应如何取舍FEC与重传?
- 答:优先启用较低比例(10%)的FEC以修复短时丢包,并将ARQ重传次数限制在较低值以避免拉高延迟;当丢包长期恶化时自动降低码率并扩缓冲作为退化策略。
来源:台湾cn2在直播低延迟场景中的调优建议和带宽估算方法