1.
目标与前置条件确认
- 明确目标:降低延迟、减少丢包、提高带宽利用率与稳定性,支持观众分布在中国内地、港澳台、日韩。
- 前置条件:VPS(香港/韩国/日本)操作权限、root或sudo、域名与DNS管理权限、流媒体服务端软件(Nginx-RTMP/Media Server)、ffmpeg。
2.
选择VPS节点与网络供应商(步骤)
- 步骤1:选择靠近用户的节点(日本关东/大阪、韩国首尔、香港机房);若观众在中国内地优先香港或日本近海节点。
- 步骤2:查看带宽与峰值计费、BGP/多网直连、是否支持带宽包或专线;优先选择有CN2/AS路径优化或多线路出口的厂商。
- 步骤3:测试延迟与丢包:在本地与VPS上用ping、mtr、iperf3:iperf3 -c VPS_IP -P 4 -t 30。
3.
基础系统与内核调优(命令示例)
- 安装并更新系统:apt update && apt upgrade -y 或 yum update -y。
- 开启BBR与调整TCP参数(Ubuntu示例):echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf; echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf; sysctl -p。
- 增大文件句柄与socket缓冲:sysctl -w net.core.rmem_max=16777216; sysctl -w net.core.wmem_max=16777216。
4.
防火墙与端口打通(直播必需端口)
- 常用端口:RTMP 1935, SRT 可配置 4000+, WebRTC/HTTP/HTTPS 80/443, 自定义 UDP。
- 示例iptables允许:iptables -I INPUT -p tcp --dport 1935 -j ACCEPT; iptables -I INPUT -p udp --dport 4000 -j ACCEPT; 保存并持久化。
5.
流媒体服务器部署(Nginx-RTMP + HLS 示例)
- 安装Nginx与RTMP模块或使用OBS推流到SRS/NGINX-RTMP。
- Nginx-rtmp.conf 示例(简化):在rtmp块配置 publish、hls on、hls_path /tmp/hls。推流地址 rtmp://vps_ip/live/streamkey。
- 使用ffmpeg做转码/切片:ffmpeg -i rtmp://... -c:v libx264 -preset veryfast -b:v 2500k -maxrate 3000k -bufsize 6000k -c:a aac -f flv rtmp://127.0.0.1/live/out。
6.
低延迟传输协议选择与配置
- WebRTC:适合互动低延迟(<500ms),需部署TURN/STUN、nginx+coturn、Media Server(Janus/mediasoup)。
- SRT:适合跨境不稳定链路,支持重传与丢包恢复。示例接收:srt-live-transmit "srt://:4000?mode=listener" "rtmp://127.0.0.1/live/out"。
- HLS (CMAF chunked):用于大量观众,配合多级缓存可降低延迟至2-3s(需配置chunked_support)。
7.
多点分发与Multi-CDN策略
- 本地VPS做源站,使用CDN(国内外多家)做边缘分发。若受政策限制,可采用境内/境外分离CDN。
- DNS-based负载均衡:配置GeoDNS,根据观众地理解析到最优CDN或VPS。若支持,使用DNS TTL较短以便切换。
- 多路线容灾:在日本/韩国/香港分别部署轻量RTP/SRT接入点,前端根据延迟切换。
8.
编码与转码优化(ffmpeg实践)
- 推流端建议固定码率+CBR或受控VBR:分辨率/码率建议 1080p=35000k-6000k(视带宽),720p=1500k-3500k。
- ffmpeg示例转码并生成HLS:ffmpeg -i rtmp://in -c:v libx264 -b:v 2500k -maxrate 3000k -bufsize 5000k -g 50 -sc_threshold 0 -c:a aac -b:a 128k -f hls -hls_time 2 -hls_list_size 6 -hls_flags delete_segments /var/www/hls/stream.m3u8。
9.
TCP/UDP传输层优化(tc qdisc 与拥塞控制)
- 使用fq或fq_codel减少队列延迟:tc qdisc add dev eth0 root fq。
- 在拥塞带宽有限且丢包高的链路用SRT或QUIC;如果仍是TCP,启用BBR且增大snd/recv缓冲。
10.
监控与指标采集(必做步骤)
- 部署Prometheus+Grafana或Zabbix监控CPU、内存、网卡丢包、TCP retransmits、接收码率。
- 使用实时质量监测(OBS统计/RTMP stats/edge logs),定期用iperf3/packetloss工具检测链路稳定性。
11.
跨境网络测试与定位问题(操作指南)
- 从用户端或中转机执行mtr VPS_IP -c 100,观察丢包跳点。
- 使用traceroute -T 或 -I 分析TCP/ICMP路径差异;若为运营商链路问题,向VPS供应商或上游运营商提交带宽质量工单并附上mtr结果。
12.
运维与自动化(部署与回滚策略)
- 使用Ansible脚本批量部署配置(nginx、ffmpeg、srt、tc命令)。
- 制定回滚计划:每次发布保存旧配置并能在30s内切回,定期演练切换CDN/VPS。
13.
问:在日本/韩国/香港VPS之间如何选择用于面向中国观众的直播源站?
- 答:优先香港或日本近海节点;香港对中国内地延迟通常最低,日本次之、韩国适合日韩观众。选择时看BGP/运营商(有无CN2/直连),并通过mtr/iperf3实际测延迟与丢包。
14.
问:如何在VPS上快速部署SRT接收并转RTMP到本地流媒体服务器?
- 答:安装srt-tools或srt-live-transmit,命令示例:srt-live-transmit "srt://:4000?mode=listener" "rtmp://127.0.0.1/live/out"。再由Nginx-RTMP或SRS接收out并分发HLS/CDN。
15.
问:出现跨境高丢包时,我应该先排查哪些项并如何临时缓解?
- 答:先用mtr确定丢包在哪一跳;临时缓解可切换到SRT/QUIC、降低码率、启用冗余流/多路推流(push到两个不同节点),并打开重传或FEC,随后联系VPS或上游运营商处理。
来源:香港 韩国 日本vps 面向直播与视频的跨境传输优化策略