Nginx-RTMP

Environment

本次打在的 Nginx-RTMP 流媒体服务器,是在 Win10 下虚拟机安装配置的。因为网上大多数分享都是 ubuntu 的,而这里主要是用了 centos,主要是 Lib 的下载有细小的差别。

Linux 系统: Linux-CentOS 7 x64


Stage 1

安装编译 nginx 需要的所有库

1
2
3
4
5
6
7
8
9
<!-- centOS 是不能直接找到这些 lib 的 -->
<!-- sudo apt-get install build-essential -->
sudo yum groupinstall "Development Tools"
sudo yum -y install openssl openssl-devel
<!-- 可以通过 yum search "%package%" 查找-->
sudo yum -y install pcre2-devel pcre2-tools

Stage 2

  1. 下载 nginx-rtmp-module
1
git clone https://github.com/arut/nginx-rtmp-module.git
  1. 安装 nginx
1
2
3
4
5
6
7
8
9
10
<!-- 如果没有 wget 先安装 yum install -y wget -->
> wget http://nginx.org/download/nginx-1.9.15.tar.gz
> tar -zxvf nginx-1.9.15.tar.gz
> unzip master.zip
> cd nginx-1.9.15
> ./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master
> sudo make && make install
  1. 检查 nginx 是否安装成功
1
sudo /usr/local/nginx/sbin/nginx

Stage 3

  1. 修改nginx配置文件:
1
2
3
> vi /usr/local/nginx/conf/nginx.conf
<!-- 键盘 i 进入编写状态,编写结束按 ESC 键,输入 "::wq" 并回车 —— 保存退出-->
  1. 添加配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
... ...
rtmp {
server {
listen 1935; #监听的端口
chunk_size 4096;
application hls { #rtmp推流请求路径
live on;
hls on;
hls_path /usr/share/nginx/html/hls;
hls_fragment 5s;
}
application live { #多个app配置
live on;
record off;
}
}
}
# 注意 rtmp 配置的编写位置是跟 http 同级
http {
include mime.types;
... ...
... ...
}
... ...
  1. 重启 nginx
1
2
> sudo /usr/local/nginx/sbin/nginx -s stop
> sudo /usr/local/nginx/sbin/nginx
  1. 检查 nginx 是否运行成功
1
2
<!-- Linux 中每个应用运行都会产生一个进程 -->
> ps -ef | grep nginx

到此 nginx-rtmp 服务器基本搭建完成,接下来是测试推流,测试刚刚搭建这个服务器


推流测试篇

这里还没有代码实现,所以暂时用工具替代来帮助我们测试
这里用的是 OBS 推流

  • obs 基本设置如下,可以选用 “显示器内容” 进行串流测试,主要要配置的是 “串流服务” 的 ++”FMS URL”++

image

- Note

此处如果跟我一样是用 Linux 虚拟器跑的,应该先获取到虚拟机的 ip 地址,linux 下的 ip 获取命令为:

1
ip addr

  • 具体获取方式网上有很多分析这里不再赘述,而我们测试地址和 nginx 是否可用的方式则是在本地PC直接使用 虚拟机 ip+端口号访问 nginx 首页,如访问成功,则证明 ip 和 nginx 都是正确可用的,此时可以直接配置到 FMS URL 中,开始串流测试
1
FMS URL: rtmp://192.168.XXX.28:1935/live
  • 上述都正常配置,点击 “开始串流”,如一切正常,可在右下角看到当前传输的网络速度,此时可以点击 “开始录制” 进行直播录制,在对应存储文件下可以找到 .flv 格式的文件生成。

异常记录:

  • “Connect timeout”:nginx 没有正常开启,或 本机/虚拟机的防火墙没有打开(网上有很多详细介绍),或 FMS URL 中的 ip 地址、端口不对
  • “RTMPSockBuf_Fill, remote host closed connection”:地址和端口都对了,但是 URL 的文件位置不对,没做过测试,但是感觉应该是路径上的文件必须是已经存在的文件夹;即:
1
2
Work: rtmp://192.168.XXX.28:1935/live
Fail: rtmp://192.168.XXX.28:1935/live/test

除非 test 文件夹存在 (猜的,太懒不做测试了–!)

更新

因为测试拉流时使用 obs 总是没有很好地测试到结果,所以又找了一个新的测试工具,是在线网页版本的,亲测感觉很好

Web Tools

注:Stream 不填,如下

image