目标:比较日本 CN2 云在 VOD(视频点播)与实时流媒体(低延迟直播)场景下的网络及端到端表现。
总体思路:搭建测试机(源站与播放端)、使用标准协议(HTTP/HTTPS HLS/DASH、RTMP、SRT)、运行并发与峰值测试、采集带宽、时延、丢包、启动时间和重缓冲率等指标。
准备两台云主机:A(日本 CN2 节点,作为源站/编码服务器),B(海外或国内播放端/测试客户端)。
系统建议:Ubuntu 22.04 LTS;开启必要端口(80/443/1935/7880等);确保安全组允许测试流量并关闭不相关服务。
安装常用工具:ffmpeg(编码与播放)、nginx+nginx-rtmp(VOD/RTMP 服务)、srt-live-transmit 或 srt-tools(SRT)、iperf3(吞吐与延迟)、tc(网络仿真)、curl 与 wget(请求测试)。
示例命令:sudo apt update && sudo apt install -y ffmpeg nginx iperf3 tc curl wget git
VOD:在 A 机部署 nginx,配置静态 HLS 输出目录;使用 ffmpeg 将 mp4 切片输出到 nginx 的 hls 目录。
示例 ffmpeg 命令(生成 HLS):ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -b:v 2500k -maxrate 2675k -bufsize 3750k -g 48 -sc_threshold 0 -c:a aac -ar 48000 -b:a 128k -hls_time 4 -hls_playlist_type vod /var/www/html/hls/stream.m3u8
RTMP(nginx-rtmp)示例:在 nginx.conf 添加 rtmp { server { listen 1935; application live { live on; record off; } } },然后用 ffmpeg 推流:ffmpeg -re -i input.mp4 -c:v libx264 -f flv rtmp://A_IP/live/stream
SRT 推流:使用 srt-live-transmit 或 ffmpeg(ffmpeg -re -i input.mp4 -c copy -f mpegts "srt://B_IP:9999?pkt_size=1316"),接收端用 srt-live-transmit 或 ffplay 播放。
步骤1:基础连通性与带宽测试。用 iperf3 在 A(server)上运行:iperf3 -s,然后在 B(client)跑:iperf3 -c A_IP -P 10 -t 60 -R。记录吞吐峰值与丢包。
步骤2:时延与抖动测量。使用 ping -c 100 A_IP 和 tcpreplay/iperf3 的 --udp 结合 ping 统计抖动,也可用 mtr 分析路径。
步骤3:VOD 端到端启动时间。B 使用 curl 或播放器请求 m3u8,测量第一次片段下载时间:time curl -s -o /dev/null http://A_IP/hls/stream.m3u8;并在浏览器或 ffplay 中记录首屏时间。
步骤4:并发与并发速率测试。用 wrk 或自制脚本并发请求不同分辨率的 m3u8,观察 nginx CPU/网络压力与慢启动现象。
用 ffmpeg/OBS 推流并用 ffplay/vlc/自制播放器测量端到端延迟:在推流端插入时间戳(比如系统时间叠加到视频),接收端读取显示并计算差值。
进行长时间稳定性测试(4-24 小时),用 tc 在 A 或中间节点引入丢包/限速(tc qdisc add dev eth0 root netem loss 1% delay 50ms 10ms)模拟不可控网络,记录重连次数与缓冲事件。
关键指标:首屏时间(Startup)、平均带宽、丢包率、抖动(Jitter)、重缓冲次数与时长、视频质量(PSNR/SSIM 可选)、观众可用带宽分布。
自动化采集:使用 Prometheus node_exporter 收集主机指标,ffmpeg 日志解析和自定义脚本(Python)提取 M3U8/TS 下载时间并写入 InfluxDB,再用 Grafana 可视化。
答:推荐命令集合:1)iperf3 基准带宽:iperf3 -c A_IP -P 10 -t 60;2)UDP 抖动测试:iperf3 -c A_IP -u -b 10M -t 60;3)时延跟踪:mtr -rwzbc100 A_IP;4)模拟链路:tc qdisc add dev eth0 root netem delay 50ms 10ms loss 0.5%。记录输出并取平均/95百分位值。
答:将播放器自动化(使用 Selenium + headless 浏览器或命令行 ffplay)请求 m3u8 并记录:DNS/连接/首段下载时间、播放器触发播放时间、重缓冲事件(播放器事件回调或解析 ffplay 日志)。脚本可每分钟并发 N 个用户采样并写入 InfluxDB,计算首屏中位数与重缓冲率。
答:1)切换编码策略:降低码率、增大缓冲区、开启自适应码率(ABR);2)网络层:启用多路径(SRT/QUIC)、加大 TCP 初始窗口、使用 CDN 边缘或多活源站;3)运维:查看链路是否走非 CN2 路径,联系云商调整 BGP/线路或迁移到距离更近的可用区。