CentOS下搭建Nginx+RTMP流媒体服务:从基础配置到实战应用
背景与应用场景
在视频直播、远程监控、在线教育等场景中,低延迟、高并发的流媒体服务是核心需求。Nginx作为轻量级高性能Web服务器,通过第三方模块nginx-rtmp-module可实现RTMP协议的流媒体支持,结合CentOS的稳定性能,能低成本搭建可靠的流媒体系统。本文将详细介绍从环境搭建到功能测试的完整流程。
一、环境准备
1. 系统与依赖安装
CentOS 7/8均支持主流编译环境,需先安装基础依赖:
# 安装编译工具与库
yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel mercurial
gcc与make:编译Nginx及依赖库pcre与zlib:处理HTTP压缩与URL重写openssl:支持HTTPS加密传输mercurial:用于克隆第三方模块代码(也可手动下载压缩包)
二、Nginx编译安装与RTMP模块配置
1. 下载第三方RTMP模块
# 克隆rtmp模块源码(或手动下载后解压)
hg clone https://bitbucket.org/arut/nginx-rtmp-module
2. 编译Nginx(含RTMP支持)
# 下载Nginx源码(以1.23.2为例)
wget http://nginx.org/download/nginx-1.23.2.tar.gz
tar -zxvf nginx-1.23.2.tar.gz && cd nginx-1.23.2
# 编译参数:添加RTMP模块与HTTP支持
./configure \
--prefix=/usr/local/nginx \
--add-module=../nginx-rtmp-module \
--with-http_mp4_module \
--with-http_ssl_module
# 编译安装
make && make install
--with-http_mp4_module:支持MP4文件直接播放(HLS/MPEG-TS兼容)--add-module:指定RTMP模块路径
三、核心配置文件详解
1. 主配置文件nginx.conf
worker_processes auto; # 自动适配CPU核心数
events {
worker_connections 1024; # 单进程最大连接数
}
http {
include /usr/local/nginx/conf/mime.types;
default_type application/octet-stream;
sendfile on; # 高效文件传输
server {
listen 80; # HTTP服务端口
root /usr/share/nginx/html; # 网页根目录
index index.html;
# 播放页面示例(需提前创建)
location /live-player.html {
try_files $uri $uri/ =404;
}
}
}
# RTMP服务配置(独立于HTTP块)
rtmp {
server {
listen 1935; # RTMP推流端口(默认1935)
chunk_size 4000; # 数据分片大小
# 直播应用
application live {
live on; # 开启直播
record off; # 禁用录制(按需开启)
allow publish all; # 允许推流(生产环境建议IP白名单)
allow play all; # 允许拉流
# 多码率支持示例(可扩展)
hls on; # 生成HLS流(支持Web端播放)
hls_path /tmp/hls; # HLS文件存储路径
hls_fragment 5s; # 分片时长(控制延迟)
}
}
}
四、推流与拉流测试
1. 推流(使用FFmpeg模拟直播)
需提前安装FFmpeg(yum install ffmpeg ffmpeg-devel):
# 推流本地视频文件至直播流
ffmpeg -re -i test.mp4 \
-c:v libx264 -preset ultrafast -b:v 1500k \
-c:a aac -b:a 128k \
-f flv rtmp://your_server_ip/live/myStream
-re:模拟实时流(去掉可加速测试)-b:v:视频码率(1500k适用于1080P,可根据需求调整)- 输出地址格式:
rtmp://服务器IP/live/流名
2. 拉流(多终端测试)
- VLC播放器:打开
媒体→打开网络串流,输入rtmp://your_server_ip/live/myStream - Web端播放:在
/usr/share/nginx/html下创建live-player.html,嵌入HLS流:<video id="player" controls autoplay width="800" height="450"> <source src="rtmp://your_server_ip/live/myStream/playlist.m3u8" type="application/x-mpegURL"> </video> <script src="https://cdn.jsdelivr.net/npm/hls.js@1.4.10/dist/hls.min.js"></script> <script> if (Hls.isSupported()) { var hls = new Hls(); hls.loadSource('rtmp://your_server_ip/live/myStream/playlist.m3u8'); hls.attachMedia(document.getElementById('player')); } </script>
五、进阶优化与安全策略
-

防盗链与权限控制
在application live块中添加:allow publish 192.168.1.0/24; # 仅允许内网IP推流 allow play 192.168.1.0/24; deny all; # 默认拒绝所有 -
高并发与负载均衡
多服务器部署时,通过Nginx反向代理+Redis共享推流状态,实现分布式集群。 -
录制与存储
开启record功能并指定存储路径:record all; record_path /var/nginx/record; record_unique on; # 自动生成唯一文件名
六、常见问题与解决
- 推流失败:检查FFmpeg编解码器是否完整,需安装
libx264等依赖。 - 端口冲突:
netstat -tulpn | grep 1935查看占用进程,修改listen端口。 - Web端无法播放:确认HLS文件目录
/tmp/hls权限为nginx用户可读写,且nginx.conf中hls_path配置正确。
总结
Nginx+RTMP在CentOS环境下的部署,兼顾了高性能与易用性。通过模块化配置可快速实现直播、点播等场景,配合FFmpeg的编解码能力,能灵活应对不同码率与格式需求。生产环境中需重点关注权限控制、高并发优化与数据安全,以确保服务稳定可靠。