
Nginx+RTMP实现直播完整流程
在当前的直播架构中,基于Nginx与nginx-rtmp-module搭建流媒体服务器是一种高效、稳定且低成本的解决方案。本文将详细介绍从环境准备、服务编译安装、配置到推拉流测试的完整流程,帮助开发者快速构建专属的直播服务系统。
一、环境准备与依赖安装
在开始之前,确保系统已安装必要的编译工具和依赖库。以CentOS/Ubuntu为例,需要安装gcc、make、openssl、pcre等基础依赖。
# CentOS系统 yum install -y gcc gcc-c++ make openssl-devel pcre-devel # Ubuntu系统 apt-get install -y build-essential libssl-dev libpcre3 libpcre3-dev
二、下载与编译Nginx及RTMP模块
Nginx本身并不自带RTMP模块,需要下载第三方的nginx-rtmp-module源码,并在编译Nginx时将其加入。
# 下载Nginx源码 wget http://nginx.org/download/nginx-1.24.0.tar.gz tar -zxvf nginx-1.24.0.tar.gz # 下载RTMP模块源码 wget https://github.com/arut/nginx-rtmp-module/archive/refs/tags/v1.2.2.tar.gz tar -zxvf v1.2.2.tar.gz # 进入Nginx目录并编译配置 cd nginx-1.24.0 ./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module-1.2.2 --with-http_ssl_module --with-http_v2_module make && make install
编译完成后,Nginx将被安装到/usr/local/nginx目录下。
三、配置Nginx RTMP服务
编辑/usr/local/nginx/conf/nginx.conf文件,添加RTMP服务配置。RTMP块需要与HTTP块平级,监听1935端口(RTMP默认端口)。
worker_processes auto;
events {
worker_connections 1024;
}
# RTMP服务配置
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on; # 开启直播模式
record off; # 关闭录像记录
}
}
}
# HTTP服务配置(可选,用于后续HLS或统计监控)
http {
server {
listen 8080;
server_name localhost;
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root html;
}
}
}配置完成后,启动Nginx服务。
/usr/local/nginx/sbin/nginx # 重新加载配置可使用 /usr/local/nginx/sbin/nginx -s reload
四、推流测试
服务端配置完毕后,即可使用推流软件(如OBS Studio)或FFmpeg命令行进行推流测试。假设服务器地址为www.ipipp.com。
1. 使用OBS推流:在设置中选择“自定义”流媒体服务器,URL填写rtmp://www.ipipp.com:1935/live,串流密钥填写test。
2. 使用FFmpeg推流:将本地视频文件推送到服务器。
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://www.ipipp.com:1935/live/test
五、拉流播放测试
推流成功后,可以使用播放器(如VLC)或网页播放器进行拉流观看。拉流地址与推流地址基本一致,格式为rtmp://www.ipipp.com:1935/live/test。
在VLC中,选择“媒体”->“打开网络串流”,输入上述地址即可观看直播。
六、进阶:配置HLS流支持
由于Flash已停用,现代浏览器无法直接播放RTMP流。通常需要将RTMP转为HLS(HTTP Live Streaming)格式,以便在网页中通过HTML5播放。
修改nginx.conf,在RTMP的application中开启HLS,并在HTTP配置中添加HLS的访问路径。
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
hls on; # 开启HLS
hls_path /usr/local/nginx/html/hls; # HLS切片文件存放路径
hls_fragment 3s; # 每个切片时长
}
}
}
http {
server {
listen 8080;
server_name localhost;
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root html;
add_header Cache-Control no-cache;
add_header Access-Control-Allow-Origin *;
}
}
}注意:需要确保/usr/local/nginx/html/hls目录存在且具有写入权限(chmod -R 777 /usr/local/nginx/html/hls)。配置完成后,重新加载Nginx。此时HLS的播放地址为http://www.ipipp.com:8080/hls/test.m3u8,可直接在Safari浏览器或使用hls.js的网页中播放。
总结
通过以上步骤,我们实现了基于Nginx和RTMP模块的直播服务器搭建。从最基础的RTMP推拉流,到适应现代浏览器环境的HLS分发,该架构具备极高的可扩展性。在实际生产环境中,还可结合FFmpeg转码、鉴权模块以及CDN分发,构建更完善、更安全的商业级直播平台。