
1. 概述:目标是用 1~3 台实验室服务器搭建小型视频 CDN(点播+直播支持),用于教学与科研验证。功能:HLS/VOD、直播 RTMP->HLS 转封装、边缘缓存、带宽控制与监控。
2. 硬件:建议服务器 8核 CPU、32GB 内存、RAID1/SSD、千兆网口(出口带宽根据并发估算)。网络:固定公网 IP 或 NAT + 端口映射;为边缘机准备独立私有网络或 VLAN。
3. 步骤:apt 更新并安装工具: sudo apt update sudo apt install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev git ffmpeg curl 随后准备 Nginx 与 rtmp 模块源码编译或使用 apt 的 nginx(建议编译添加 nginx-rtmp-module 与 http_mp4_module)。
4. 操作: git clone https://github.com/arut/nginx-rtmp-module.git wget http://nginx.org/download/nginx-1.22.1.tar.gz && tar zxvf nginx-1.22.1.tar.gz cd nginx-1.22.1 ./configure --with-http_ssl_module --with-http_v2_module --with-http_mp4_module --add-module=../nginx-rtmp-module make && sudo make install 默认安装路径 /usr/local/nginx,可调整。
5. 在 /usr/local/nginx/conf/nginx.conf 中加入 rtmp 段: rtmp { server { listen 1935; chunk_size 4096; application live { live on; record off; hls on; hls_path /var/www/hls; hls_fragment 4s; hls_playlist_length 30s; } } } 并确保 /var/www/hls 目录可写,nginx 进程用户有权限。
6. 在 http 段配置 server 用于 VOD 与 HLS: server { listen 80; server_name cdn.example.edu; root /var/www; location /hls/ { add_header Cache-Control "public, max-age=30"; types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } } location /vod/ { mp4; } } 若有多个边缘节点,使用 proxy_cache 在边缘启用缓存:
7. 在 edge nginx.conf 添加: proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cdn_cache:100m max_size=20g inactive=24h use_temp_path=off; server { ... location /vod/ { proxy_pass http://origin.example.edu; proxy_cache cdn_cache; proxy_cache_valid 200 302 12h; proxy_cache_valid 404 1m; add_header X-Cache-Status $upstream_cache_status; } } 并在 DNS 或路由上将客户端指向最近边缘节点。
8. 常用命令(转码为多码率 HLS): ffmpeg -i input.mp4 -preset veryfast -g 48 -sc_threshold 0 \ -map 0:v -map 0:a -s:v:0 1280x720 -b:v:0 2500k -maxrate:v:0 2675k -bufsize:v:0 3750k \ -map 0:v -map 0:a -s:v:1 854x480 -b:v:1 1000k -maxrate:v:1 1075k -bufsize:v:1 1500k \ -map 0:a -c:a aac -b:a 128k -f hls -hls_time 6 -hls_playlist_type vod \ -hls_segment_filename '/var/www/hls/segment_%v_%03d.ts' /var/www/hls/playlist_%v.m3u8 调整码率与分辨率以匹配实验室带宽。
9. 使用 Let's Encrypt 自动签发证书: sudo apt install certbot sudo certbot certonly --webroot -w /var/www -d cdn.example.edu 在 nginx server 中配置 ssl_certificate 与 ssl_certificate_key,并启用 HTTP->HTTPS 重定向。
10. 推荐设置: - 增大文件描述符:在 /etc/security/limits.conf 加入 nginx 用户的 nofile 65536; - sysctl 调优:net.core.somaxconn=65535, net.ipv4.tcp_tw_reuse=1; - 在 nginx.conf 开启 sendfile、tcp_nopush、tcp_nodelay、keepalive_timeout 合理设置。
11. VOD 同步:使用 rsync + cron 将新切片从 origin 同步到边缘(或使用 pull 模式由边缘代理到 origin): rsync -avz --delete /var/www/hls/ edge:/var/www/hls/ 或配置 edge 直接 proxy_pass 到 origin,节省存储。
12. 监控:使用 Prometheus node_exporter + nginx exporter + Grafana,监控带宽、连接数、缓存命中率。测试工具:使用 curl 下载 m3u8 与 ts,使用 hls.js 浏览器端回放进行端到端验证。
13. 在教学中拆分任务:网络拓扑设计、服务器部署、转码参数实验、缓存策略评估。科研可用场景:QoE 评估、缓存策略对比、转码节能分析。
14. Q: 学校网络 NAT 后如何让外网学生访问直播?
14. A: 最简方案是使用带公网 IP 的跳板机做反向代理或使用云端作为中继(将 origin 推流到云,然后学生从云获取),也可申请学校固定公网并做端口映射。
15. Q: 如何评估并发用户数与带宽规划?
15. A: 根据最高分辨率码率乘以并发估计峰值带宽,留 20%-30% 余量;例如 2000 kbps × 100 并发 = 200 Mbps,建议至少 250 Mbps 出口。
16. Q: 如何保证视频安全与权限管理?
16. A: 为私有课程启用 token 验证或签名 URL(nginx 可以结合 Lua 或第三方模块实现短时签名),并用 HTTPS 加密传输,NAT 环境下结合防火墙限制端口。