Linux视频服务器的架设是一个涉及硬件选型、软件配置、网络优化和安全防护的系统工程,适用于企业内训、在线教育、直播流媒体等多种场景,以下从环境准备、核心软件安装、配置优化、安全加固及测试部署五个环节,详细说明架设过程。

环境准备与硬件选型
视频服务器的性能直接影响流媒体传输质量,需根据并发用户数、视频分辨率(如720P、1080P、4K)及码率合理配置硬件。
硬件要求
| 组件 | 推荐配置 |
|---|---|
| CPU | 多核处理器(如Intel Xeon E5或AMD EPYC),至少4核心,支持硬件编码(Intel QSV/NVIDIA NVENC)可降低CPU负载 |
| 内存 | 16GB起步,每路1080P视频流建议预留2GB内存,支持高并发需32GB以上 |
| 硬盘 | 系统盘(SSD,256GB)+ 数据盘(HDD或NAS,RAID 5/10,容量根据存储时长计算,如10路1080P 24小时录像约需2TB) |
| 网络 | 千兆双网卡,一块用于管理,一块用于视频数据传输,带宽需满足“并发用户数×单路码率”需求(如100路10Mbps流需1Gbps带宽) |
| 操作系统 | CentOS 7+/Ubuntu 20.04 LTS,内核版本建议4.15+,确保支持硬件加速功能 |
网络环境配置
- 静态IP地址:避免动态IP导致服务中断,例如配置
168.1.100/24,网关168.1.1,DNS8.8.8。 - 防火墙开放端口:视频服务常用端口包括RTMP(1935)、HLS(80/443)、Web管理界面(8080),可通过
firewall-cmd或ufw开放:firewall-cmd --permanent --add-port=1935/tcp --add-port=80/tcp --add-port=443/tcp firewall-cmd --reload
核心软件安装与配置
Linux视频服务器通常采用“推流-转码-分发”架构,核心软件包括流媒体服务(Nginx-RTMP)、视频转码(FFmpeg)、Web管理(Wowza或自研界面)。
安装Nginx-RTMP模块
Nginx-RTMP是开源流媒体服务器,支持RTMP推流、HLS/HTTP-FLV分发,需编译时添加RTMP模块。
步骤:

# 安装依赖 yum install -y gcc pcre-devel openssl-devel git # 下载Nginx及RTMP模块 wget http://nginx.org/download/nginx-1.22.0.tar.gz git clone https://github.com/arut/nginx-rtmp-module.git # 编译安装 tar -zxvf nginx-1.22.0.tar.gz cd nginx-1.22.0 ./configure --add-module=../nginx-rtmp-module --with-http_ssl_module make && make install
配置Nginx-rtmp.conf:
在/usr/local/nginx/conf/nginx.conf中添加RTMP配置:
rtmp {
server {
listen 1935; # RTMP推流端口
chunk_size 4096;
application live {
live on; # 开启直播
record off; # 不录制直播流
hls on; # 开启HLS转码
hls_path /usr/local/nginx/html/hls; # HLS切片存放路径
hls_fragment 3s; # 每片时长3秒
}
}
}
http {
server {
listen 80;
location /hls {
types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; }
root /usr/local/nginx/html;
add_header Cache-Control no-cache; # 禁止HLS切片缓存
}
}
}
启动Nginx:/usr/local/nginx/sbin/nginx,此时可通过http://服务器IP/hls访问HLS播放列表。
集成FFmpeg实现硬件转码
若视频源码率较高或需多分辨率转码(如推流1080P,分发720P/480P),可结合FFmpeg进行实时转码。
安装FFmpeg(支持硬件加速):

# Ubuntu系统 apt install -y ffmpeg libavcodec-extra58 # CentOS系统 rpm --import http://li.nux.ro/download/nux.ro/RPM-GPG-KEY-nux.ro rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm yum install -y ffmpeg ffmpeg-devel
配置转码脚本:
创建转码脚本/usr/local/nginx/scripts/transcode.sh,实现将RTMP流转码为多路HLS:
#!/bin/bash
INPUT_STREAM="rtmp://localhost/live/stream" # 原始RTMP流
OUTPUT_PATH="/usr/local/nginx/html/hls"
ffmpeg -i "$INPUT_STREAM" \
-c:v libx264 -preset ultrafast -b:v 2000k -maxrate 2500k -bufsize 4000k \ # 1080P转码
-c:a aac -b:a 128k \
-f hls "${OUTPUT_PATH}/1080p/stream.m3u8" & # 1080P输出
ffmpeg -i "$INPUT_STREAM" \
-c:v libx264 -preset ultrafast -b:v 1000k -maxrate 1200k -bufsize 2000k \ # 720P转码
-c:a aac -b:a 96k \
-f hls "${OUTPUT_PATH}/720p/stream.m3u8" &
赋予执行权限:chmod +x /usr/local/nginx/scripts/transcode.sh,并通过nohup ./transcode.sh &后台运行。
安装Web管理界面(可选)
为简化推流管理和监控,可部署开源的Video.js管理界面或集成Wowza Streaming Engine(商业软件),以Video.js为例:
# 下载Video.js并部署到Nginx站点目录 cd /usr/local/nginx/html wget https://github.com/videojs/video.js/archive/8.0.4.tar.gz tar -zxvf video.js-8.0.4.tar.gz mv video.js-8.0.4/video.min.js . && mv video.js-8.0.4/lang/ . # 创建播放测试页面index.html,嵌入Video.js播放器
性能优化与负载均衡
磁盘I/O优化
- 若使用本地HDD,调整
/etc/fstab中挂载参数,添加noatime减少磁盘访问:UUID=xxx /usr/local/nginx/html/hls ext4 defaults,noatime 0 0
- 对于NAS存储,启用NFS或iSCSI协议,并调整
/etc/sysctl.conf优化网络缓冲区:net.core.rmem_max=16777216 net.core.wmem_max=16777216 net.ipv4.tcp_rmem="4096 87380 16777216" net.ipv4.tcp_wmem="4096 65536 16777216" sysctl -p
负载均衡配置
当单服务器无法满足高并发时,可配置Nginx反向代理实现多服务器负载均衡,在主Nginx的http块中添加:
upstream video_servers {
server 192.168.1.101:80 weight=3; # 服务器1权重3
server 192.168.1.102:80 weight=2; # 服务器2权重2
}
server {
listen 80;
location /hls {
proxy_pass http://video_servers;
proxy_set_header Host $host;
proxy_cache off;
}
}
安全加固措施
视频服务器易受DDoS攻击和未授权推流,需从网络、系统、应用三层面加固。
网络安全
- 使用iptables限制仅允许特定IP访问推流端口:
iptables -A INPUT -p tcp --dport 1935 -s 192.168.1.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 1935 -j DROP
- 启用Fail2ban防止暴力破解,监控Nginx日志并封禁异常IP:
apt install -y fail2ban cat > /etc/fail2ban/jail.local << EOF [nginx-rtmp] enabled = true port = 1935,80,443 filter = nginx-rtmp logpath = /usr/local/nginx/logs/error.log maxretry = 3 bantime = 3600 EOF
应用安全
- 修改RTMP应用名称,避免使用默认的
live,降低被扫描风险:application secure_live { # 自定义应用名 live on; allow publish 192.168.1.0/24; # 仅允许内网推流 deny publish all; } - 启用HTTPS加密传输播放地址,通过Let's Encrypt免费证书:
certbot --nginx -d video.example.com
测试与部署
推流测试
使用OBS Studio推流工具,配置参数:
- 服务器:
rtmp://服务器IP:1935/secure_live(对应自定义应用名) - 串流密钥:
teststream(可在Nginx配置中通过on_publish http://localhost/auth;动态验证)
播放测试
通过VLC或浏览器打开http://服务器IP/hls/1080p/stream.m3u8,检查视频是否正常播放;同时监控服务器资源占用(top、htop),确保CPU、内存、带宽未超载。
日志监控
定期分析Nginx访问日志(/usr/local/nginx/logs/access.log)和RTMP状态日志,排查卡顿、断流问题,可通过rtmp_stats模块实时监控在线人数:
rtmp {
server {
stats stats; # 开启统计模块
stats_path /stats; # 访问http://服务器IP/stats查看状态
}
}
相关问答FAQs
Q1: 视频播放卡顿如何排查?
A1: 卡顿通常由网络带宽不足、服务器负载过高或HLS切片参数不当导致,排查步骤:①检查服务器带宽占用(iftop),确认是否达到上限;②通过htop查看CPU/内存使用率,若CPU过高则启用硬件转码(NVENC/QSV);③调整HLS切片时长(hls_fragment),建议3-5秒,过短会增加请求次数,过长导致卡顿延迟;④使用traceroute和ping测试客户端到服务器的网络质量,排查中间链路问题。
Q2: 如何实现视频录制与点播功能?
A2: 在Nginx-RTMP配置中开启录制功能,并指定录制路径和格式,在application live块中添加:
record all; # 录制所有直播流 record_path /usr/local/nginx/html/recordings; # 录制文件存放路径 record_suffix .flv; # 录制文件格式
录制完成后,可通过Nginx的location块配置点播服务,
location /vod {
alias /usr/local/nginx/html/recordings;
flv;
mp4;
}
客户端即可通过http://服务器IP/vod/xxx.flv点播录制视频,需注意,长时间录制需监控磁盘空间,并定期清理旧文件。
