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. 术语

  1. Real Time Messaging Protocol,实时消息传送协议(RTMP协议)
  2. HTTP Live Streaming(HLS)

6. 安装 nginx-rtmp-module

  1. github 上下载包
  2. 解压到指定目录
  3. 编译安装到 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,解决方案如下:

  1. 安装 openssl 方法,见:https://www.jianshu.com/p/c6d6a60002e4