要使用Nginx搭建流媒体服务器,主要依赖其模块支持(如RTMP、HLS、DASH等),可实现视频流的推流、拉播和分发,以下是详细步骤及配置说明:

(图片来源网络,侵删)
环境准备
- 系统要求:推荐Linux(如Ubuntu/CentOS),确保内核支持多路转发。
- 安装依赖:
- 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" && sudo yum install -y pcre-devel zlib-devel openssl-devel
- Ubuntu/Debian:
- 下载Nginx及扩展模块:
- 官方Nginx:
wget http://nginx.org/download/nginx-1.25.3.tar.gz - RTMP模块(用于推流/拉流):
git clone https://github.com/arut/nginx-rtmp-module.git - HLS模块(需启用,部分版本已集成)。
- 官方Nginx:
编译安装Nginx
- 解压并进入目录:
tar -zxvf nginx-1.25.3.tar.gz && cd nginx-1.25.3
- 编译配置(关键参数):
./configure --prefix=/usr/local/nginx \ --add-module=/path/to/nginx-rtmp-module \ --with-http_ssl_module \ --with-http_v2_module - 编译安装:
make -j$(nproc) && sudo make install
配置RTMP服务
编辑Nginx配置文件(如/usr/local/nginx/conf/nginx.conf),添加RTMP服务器块:
rtmp {
server {
listen 1935; # RTMP默认端口
chunk_size 4096;
application live {
live on; # 启用直播
record off; # 不录制流
hls on; # 启用HLS(可选,用于HTTP拉流)
hls_path /tmp/hls; # HLS切片存放路径
hls_fragment 3s; # 每片时长
hls_cleanup on; # 清理旧切片
}
}
}
http {
server {
listen 80;
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp; # HLS路径与RTMP配置一致
add_header Cache-Control no-cache; # 禁用缓存
}
}
}
启动服务与测试
- 启动Nginx:
sudo /usr/local/nginx/sbin/nginx
- 推流测试(使用FFmpeg):
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://your_server_ip:1935/live/stream_key
input.mp4:本地视频文件stream_key:自定义流标识符(需与播放URL一致)
- 播放测试:
- RTMP播放:
rtmp://your_server_ip:1935/live/stream_key(需VLC等支持RTMP的播放器) - HLS播放:
http://your_server_ip/hls/stream_key.m3u8(支持HTML5播放)
- RTMP播放:
常见问题与优化
- 防火墙配置:
- 开放端口:
sudo ufw allow 1935/tcp(RTMP)、sudo ufw allow 80/tcp(HLS)。
- 开放端口:
- 性能优化:
- 调整
worker_processes为CPU核心数。 - 增加缓冲区:
proxy_buffering on; proxy_buffer_size 4k;。
- 调整
- 防盗链:
location /hls { valid_referers none blocked your_domain.com; if ($invalid_referer) { return 403; } }
相关问答FAQs
Q1: 如何实现RTMP直播的录制与点播?
A: 在RTMP配置中添加record on; record_path /tmp/record;,录制后的文件可通过HTTP模块提供点播服务,在http块中添加location /vod { alias /tmp/record; autoindex on; },即可通过http://your_server_ip/vod/文件名.mp4访问。
Q2: HLS播放延迟高如何优化?
A: 可通过调整HLS切片时长(如hls_fragment 1s)降低延迟,但会增加服务器负载,结合低延迟协议(如LL-HLS)或使用WebRTC技术可进一步优化,需额外配置nginx-rtmp-module的llhls on参数。

(图片来源网络,侵删)
