一、环境准备
1. 服务器要求
- 操作系统:Ubuntu/CentOS/Debian(推荐 Ubuntu 22.04 LTS)
- 硬件配置:4GB 内存 + 2 核 CPU(HLS 转码需更高配置)
- 依赖库:gcc、make、pcre、zlib、openssl
2. 安装 Nginx + RTMP 模块
# 下载 Nginx 和 RTMP 模块源码
wget http://nginx.org/download/nginx-1.25.3.tar.gz
git clone https://github.com/arut/nginx-rtmp-module
# 编译安装
tar -zxvf nginx-1.25.3.tar.gz
cd nginx-1.25.3
./configure –add-module=./nginx-rtmp-module –with-http_ssl_module
make && sudo make install
3. 安装 FFmpeg
sudo apt-get install ffmpeg # Ubuntu/Debian
# 或手动编译安装最新版(支持 H.265 硬编解码)
二、Nginx 配置
1. 基础 RTMP 配置
编辑 /usr/local/nginx/conf/nginx.conf,添加以下内容:
rtmp {
server {
listen 1935; # RTMP 默认端口
chunk_size 4096; # 数据块大小
# 直播应用
application live {
live on; # 开启直播
record off; # 关闭录制
# HLS 支持
hls on;
hls_path /tmp/hls; # HLS 文件存储路径
hls_fragment 5s; # 每个 TS 文件时长
hls_playlist_length 60s; # 播放列表长度
}
# 点播应用
application vod {
play /opt/video/vod; # 点播文件目录
}
}
}
http {
server {
listen 80;
server_name localhost;
# HLS 访问配置
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 *; # 跨域支持
}
# RTMP 状态监控
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /usr/local/nginx/nginx-rtmp-module;
}
}
}
2. 启用 HTTP-FLV 支持(可选)
安装 nginx-http-flv-module:
git clone https://github.com/winshining/nginx-http-flv-module
./configure –add-module=./nginx-http-flv-module –add-module=./nginx-rtmp-module
make && sudo make install
配置 /etc/nginx/conf.d/flv.conf:
location /live {
flv;
root /tmp/hls;
add_header Access-Control-Allow-Origin *;
}
三、功能实现
1. RTMP 直播推流与播放
- 推流地址:rtmp://服务器IP/live/stream_key
- 播放地址:
- RTMP:rtmp://服务器IP/live/stream_key
- HLS:http://服务器IP/hls/stream_key.m3u8
2. 视频点播
- 将视频文件(windows用 scp -r "本地文件路径" 用户名@服务器IP:/目标路径 如test.mp4)放入 /opt/video/vod 目录。
- 播放地址:rtmp://服务器IP/vod/test.mp4
3. HLS 实时切片
- FFmpeg 自动将 RTMP 流切片为 HLS 格式: ffmpeg -re -i input.mp4 -c:v copy -c:a copy -f flv rtmp://服务器IP/live/stream
四、优化与安全
1. 性能优化
- 启用硬件加速(NVIDIA GPU): rtmp {
application live {
# 启用 GPU 编码
exec ffmpeg -hwaccel cuvid -i rtmp://localhost/live/$name \\
-c:v h264_nvenc -preset fast -b:v 2500k \\
-c:a aac -b:a 128k -f flv rtmp://localhost/hls/$name_720p;
}
} - 调整缓冲区: rtmp {
chunk_size 8192; # 增大块大小以减少延迟
}
2. 安全加固
- 访问控制: location /hls {
allow 192.168.1.0/24; # 允许内网访问
deny all; # 拒绝其他 IP
} - HTTPS 配置: server {
listen 443 ssl;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
}
五、测试与验证
1. 推流测试
使用 OBS 推流:
- 推流地址:rtmp://服务器IP/live/stream
- 流密钥:test
2. 播放测试
- HLS 播放:浏览器访问 http://服务器IP/hls/stream.m3u8
- RTMP 播放:VLC 播放器输入 rtmp://服务器IP/live/stream
3. 日志监控
- RTMP 状态页:http://服务器IP/stat
- 错误日志:/usr/local/nginx/logs/error.log
六、常见问题解决
推流失败(Error 403) | 检查 hls_path 目录权限:chmod 777 /tmp/hls |
HLS 无法播放 | 确认 FFmpeg 是否生成 .m3u8 和 .ts 文件,检查防火墙是否开放 80/1935 端口 |
延迟过高 | 减小 hls_fragment(如 3s),启用低延迟模式:-preset ultrafast |
Nginx 启动报错 | 检查配置语法:nginx -t,重新编译时确保依赖库版本兼容 |
七、扩展应用
- 多平台级联:通过 push 指令将流推送到其他服务器(如 YouTube/抖音): application live {
live on;
push rtmp://youtube/stream_key;
} - 动态码率自适应:结合 FFmpeg 生成多分辨率 HLS 流: ffmpeg -i input.mp4 -vf scale=1280:720 -c:v libx264 -b:v 2500k \\
-vf scale=854:480 -c:v libx264 -b:v 1000k \\
-f flv rtmp://服务器IP/live/stream_720p
通过以上配置,可搭建一个高性能的流媒体服务器,支持低延迟直播、点播回放及多终端自适应播放。如需进一步优化,可参考 Nginx 官方文档及 FFmpeg 高级参数调优。
出现问题:记得私信与我交流
评论前必须登录!
注册