搭建Nginx流媒体服务器需要结合Nginx的核心模块与第三方模块(如nginx-rtmp-module),实现RTMP、HLS、DASH等协议的推流与拉流服务,以下是详细步骤及配置说明:

环境准备
- 系统要求:推荐Linux(如Ubuntu 20.04/CentOS 7),确保内核支持高并发(建议4GB以上内存,多核CPU)。
- 依赖安装:
# Ubuntu/Debian sudo apt update && sudo apt install -y build-essential libpcre3 libpcre3-dev zlib1g-dev openssl libssl-dev # CentOS/RHEL sudo yum groupinstall "Development Tools" -y && sudo yum install -y pcre-devel zlib-devel openssl-devel
编译安装Nginx与RTMP模块
- 下载源码:
wget http://nginx.org/download/nginx-1.22.1.tar.gz wget https://github.com/arut/nginx-rtmp-module/archive/refs/heads/master.zip tar -xzf nginx-1.22.1.tar.gz && unzip master.zip cd nginx-1.22.1
- 编译配置:
./configure --add-module=../nginx-rtmp-module-master \ --with-http_ssl_module \ --with-http_v2_module \ --with-stream - 编译安装:
make -j$(nproc) && sudo make install
配置RTMP与HLS服务
-
编辑Nginx配置文件(
/usr/local/nginx/conf/nginx.conf):user nobody; worker_processes auto; events { worker_connections 1024; } rtmp { server { listen 1935; # RTMP默认端口 chunk_size 4096; application live { live on; record off; hls on; # 启用HLS hls_path /tmp/hls; # HLS切片存放路径 hls_fragment 3s; # 每片时长 hls_playlist_length 60s; # 播放列表时长 } } } http { server { listen 80; location /hls { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } root /tmp; add_header Cache-Control no-cache; add_header 'Access-Control-Allow-Origin' '*' always; } } } -
创建HLS目录并设置权限:
sudo mkdir -p /tmp/hls && sudo chmod -R 755 /tmp
启动服务与测试
- 启动Nginx:
sudo /usr/local/nginx/sbin/nginx
- 推流测试(使用OBS):
- OBS设置:服务选择“自定义”,服务器地址为
rtmp://your_server_ip:1935/live,流密钥为任意名称(如test)。
- OBS设置:服务选择“自定义”,服务器地址为
- 播放测试:
- HLS播放地址:
http://your_server_ip/hls/test.m3u8(支持VLC等播放器)。 - RTMP播放地址:
rtmp://your_server_ip:1935/live/test(支持VLC/FFmpeg)。
- HLS播放地址:
常见问题与优化
- 防火墙配置:
sudo ufw allow 1935/tcp # 允许RTMP端口 sudo ufw allow 80/tcp # 允许HTTP端口(HLS)
- 性能优化:
- 调整
worker_processes为CPU核心数。 - 增加
worker_connections值(如65535)。 - 启用
gzip压缩(HTTP模块中配置)。
- 调整
- 日志监控:
- 访问日志:
/usr/local/nginx/logs/access.log - 错误日志:
/usr/local/nginx/logs/error.log
- 访问日志:
相关问答FAQs
Q1: 如何实现RTMP直播的录制与回放?
A: 在nginx.conf的rtmp模块中添加配置:
application live {
live on;
record all; # 录制所有流
record_path /tmp/record; # 录制文件路径
record_suffix -%Y-%m-%d_%H-%M-%S.flv; # 文件名格式
}
录制后的FLV文件可通过HTTP服务(如Nginx的location块)提供下载或在线播放。

Q2: HLS延迟过高如何优化?
A: HLS默认延迟较高(约6-10秒),可通过以下方式优化:
- 减小
hls_fragment值(如改为1s)。 - 使用
hls_continuous on和hls_cleanup off避免切片清理。 - 对于低延迟场景,可结合WebRTC协议(需安装nginx-rtmp-module的WebRTC扩展)。
通过以上配置,Nginx可作为稳定、高效的流媒体服务器,适用于直播、点播等场景,实际部署中需根据业务需求调整参数,并监控服务器资源使用情况。

