1. 下载地址
http://nginx.org/en/download.html
2. 安装
./configure --prefix=/usr/local/nginx
3. 启动、停止、重启
nginx # 启动
nginx -s reload # 重新加载配置文件
nginx -s stop # 快速停止
nginx -s quit # 优雅的退出
nginx -s reopen # 重新打开日志文件
nginx -c filename # 指定配置文件
pkill -9 nginx # 强制停止
kill -QUIT 进程号 # 从容停止
kill -TERM 进程号 # 快速停止
4. nginx.conf
配置文件
# ... main 全局模块
events {
# ...
}
http { # http 模块
upstream # upstream 负载均衡块
{
# ...
}
server { # server 块
# ...
location [PATTERN] # location 块
{
# ...
}
}
server
{
}
}
mail { # mail 块
}
http {
server {
# 设置根目录
location / {
root /data/www;
}
# 设置image访问目录
location /images/ {
root /data;
}
# 设置代理
location /dl/ {
proxy_pass http://127.0.0.1:8080;
}
# 正则映射(将以.gif .png .jpg结尾的映射到指定目录)
location ~ \.(gif|png|jpg)$ {
root /data/images;
}
}
}
5. 术语
- Real Time Messaging Protocol,实时消息传送协议(RTMP协议)
- HTTP Live Streaming(HLS)
6. 安装 nginx-rtmp-module
- 到
github
上下载包 - 解压到指定目录
- 编译安装到 nginx 中
# 第一步
./configure --add-module=/Users/johnxu/package/NRM --prefix=/Users/johnxu/package/nginx-1.16.1/nginx --with-debug
# 第二步
make & make install
7. 推流的使用
RTMP 的推流方式
1. 基本使用
rtmp {
server {
listen 1935;
application mylive {
live on;
}
}
}
- 推流端使用 obs,设置推流源为:rmp://192.168.1.5:1935/mylive,密钥为:6
- 拉流端使用 VLC,设置拉流源为:rtmp://192.168.1.5:1935/mylive/6
HLS 的推流方式
1. 基本使用
worker_processes 1;
events {
worker_connections 1024;
}
rtmp {
server {
listen 1935;
application mylive {
live on;
hls on;
hls_path /Users/johnxu/package/nginx-1.16.1/m3u8File;
}
}
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
location /mylive_hls {
types {
# m3u8 type 设置
application/vnd.apple.mpegurl m3u8;
# ts 分片文件设置
video/mp2t ts;
}
alias /Users/johnxu/package/nginx-1.16.1/m3u8File;
add_header Cache-Control no-cache; # 禁止缓存
}
location /control {
rtmp_control all;
}
}
}
- 推流端可以使用 obs 设置推流源:rtmp://192.168.1.5:1935/mylive,串密钥为:44
- 拉流端使用 VLC,设置网络地址为:http://192.168.1.5:1935/mylive/44.m3u8
8. 推流的其他配置
8.1 录制功能
rtmp {
server {
listen 1935;
application mylive {
live on;
# 以下配置是用于开启 HLS 推流用的
hls on;
hls_path /Users/johnxu/package/nginx-1.16.1/m3u8File;
# 以上配置
# 以下配置是实现录制直播配置
hls_fragment 2s;
hls_playlist_length 16s;
recorder myRecord {
record all manual; # all:录制音频和视频, manual:手动记录和关闭录制(默认自动)
record_suffix _.flv; # 用于设置录制文件输出的文件名
record_path /tmp/rec; # 用于设置录制文件的输出路径
# recort_unique on; # 用于将当前时间戳添加到已被记录的文件中,避免在每次产生新记录时
}
# 开启录制:http://127.0.0.1/control/record/start?app=mylive&name=77&rec=myRecord
# 停止录制:http://127.0.0.1/control/record/stop?app=mylive&name=77&rec=myRecord
# 以上配置
}
}
}
- 开启录制:http://127.0.0.1/control/record/start?app=mylive&name=77&rec=myRecord
- 停止录制:http://127.0.0.1/control/record/stop?app=mylive&name=77&rec=myRecord
8.2 配置 control
.
.
.
server {
.
.
.
location /control {
rtmp_control all;
}
.
.
.
}
.
.
.
8.2.1可以使用 drop
命令操作拉流和推流
1. 踢出推流用户
http://192.168.1.5/control/drop/publisher?app=mylive&name=77
2. 踢出全部拉流用户
http://192.68.1.5/control/drop/subscriber?app=mylive&name=77
3. 根据 IP 踢出拉流用户
http://192.168.1.5/control/drop/client?app=mylive&name=77&addr172.26.22.4
4. 根据序号踢出拉流用户
http://192.168.1.6/control/drop/client?app=mylive&name=77&clientid=1
8.2.2 redirect
命令
1. 重定向推流地址到 newname
http://192.168.1.5/control/redirect/publisher?app=mylive&newname=66
2. 重定向所有拉流用户到新流
http://192.168.1.5/control/redirect/subscriber?app=mylive&newname=66
8.3 配置数据统计模块
http {
server {
location /liveStat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /download/NRM;
}
}
}
- 通过地址访问:
http://192.168.1.5/liveStat
9. 配置文件如下
worker_processes 1;
events {
worker_connections 1024;
}
rtmp {
server {
listen 1935;
application mylive {
live on;
sync 10ms;
# 以下配置是用于开启 HLS 推流用的
hls on;
hls_path /Users/johnxu/package/nginx-1.16.1/m3u8File;
# 以上配置
# 以下配置是实现录制直播配置
hls_fragment 2s;
hls_playlist_length 16s;
recorder myRecord {
record all manual;
record_suffix _.flv;
record_path /tmp/rec;
}
# 开启录制:http://127.0.0.1/control/record/start?app=mylive&name=77&rec=myRecord
# 停止录制:http://127.0.0.1/control/record/stop?app=mylive&name=77&rec=myRecord
# 以上配置
}
}
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
location /mylive_hls {
types {
# m3u8 type 设置
application/vnd.apple.mpegurl m3u8;
# ts 分片文件设置
video/mp2t ts;
}
alias /Users/johnxu/package/nginx-1.16.1/m3u8File;
add_header Cache-Control no-cache; # 禁止缓存
}
location /control {
rtmp_control all;
}
location /liveStat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root html/NRM;
}
}
}
安装软件中出现的问题
1. 安装 NRM 扩展的时候找不到 openssl,解决方案如下:
- 安装 openssl 方法,见:https://www.jianshu.com/p/c6d6a60002e4