Android RTMP协议直播之使用Nginx搭建RTMP流媒体服务器

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,Nginx是一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高以及高并发等优势。在官方测试的结果中Nginx能够支持五万个并行连接,而在实际的运作中,可以支持二万至四万个并行连接。Nginx整体采用模块化设计是Nginx的一个重大特点,甚至http服务器核心功能也是一个模块。旧版本的Nginx的模块是静态的,添加和删除模块都要对Nginx进行重新编译,1.9.11以及更新的版本已经支持动态模块加载。本文将介绍如何在Linux服务器中如何编译部署Nginx以及如何利用Nginx部署RTMP流媒体服务。

编译部署流媒体服务器

使用Nginx部署流媒体服务器需要至少两个库

  • Nginx
  • nginx-rtmp-module
  • ffmpeg(非必须)

其中nginx-rtmp-module是Nginx容器中的一个模块用于处理RTMP请求,nginx-rtmp-module属于开源项目在github上可以下载。Nginx进入官方下载Nginx,本文服务器环境为阿里云Ubuntu.

下载解压Nginx

从官网中获取Nginx以及nginx-rtmp-module

1
2
wget http://nginx.org/download/nginx-1.16.0.tar.gz
git clone https://github.com/arut/nginx-rtmp-module.git

解压到当前目录

1
tar -zxvf nginx-1.16.0.tar.gz


编译安装Nginx

编译安装Nginx,进入刚刚解压的目录并执行configure命令

1
2
cd nginx-1.16.0
./configure --with-http_ssl_module --add-module=../nginx-rtmp-module

当我执行完configure的时候出现了如下异常



1
./configure: error: the HTTP rewrite module requires the PCRE library.

提示需要PCRE library.见招拆招安装PCRE library.

1
yum -y install pcre-devel

继续configure,发现又出现问题了

错误信息如下



1
./configure: error: the HTTP gzip module requires the zlib library.

emmm这里还需要zlib library,安装

1
yum install -y zlib-devel

继续configure,这次好像没错了.







当执行完configure命令后在当前目录中生成了Makefile文件,如果没有生成该文件则说明configure在检查环境配置的时候出现了问题,请查阅错误信息。接下来使用make进行安装

1
make install


当install执行完后会生成目录/usr/local/nginx(这个目录可以通过./configure的prefix进行配置)。


配置nginx-rtmp服务器

使用vim打开/usr/local/nginx/conf/nginx.conf并添加如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
rtmp {
server {
listen 9510;
chunk_size 4096;
application live {
live on;
record off;
exec ffmpeg -i rtmp://localhost/live/$name -threads 2
-c:v libx264 -profile:v baseline -b:v 350K -s 640x360 -f flv -c:a aac -ac 1 -strict -2 -b:a 56k rtmp://localhost/live360p/$name;
}
application live360p {
live on;
record off;
}
}
}
  • listen:端口
  • chunk_size:流复用的最大块大小。默认值为4096.此值越大,CPU开销越低。该值不能小于128。
  • live:实时模式(直播)
  • record:是否是记录模式,可以将流记录在flv文件中,可选值[off|all|audio|video|keyframes|manual]。例如要记录音视频保存到flv视频中可以使用如下代码
1
2
3
4
record audio video
record_path /usr/ben/livetemp; #回放目录
record_max_size 1K; #文件最大大小
record_unique on; #将当前时间戳附加到录制的文件。否则,每次进行新录制时都会重写相同的文件

更多关于nginx-rtmp配置请参考文档

启动Nginx

启动Nginx,进入sbin目录,执行./nginx命令

1
./nginx

打开浏览器,输入http://ip,如果启动成功则可以在浏览器看到如下页面.



配置测试播放器

配置测试播放器,现在可以在服务器中写一个html用于测试直播拉流端。
使用vim打开/usr/local/nginx/html/index.html文件并替换为下边的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<html>                                                                                                                                                  
<head>
<title>流媒体服务视频直播</title>
<meta charset="utf-8">
<link href="http://vjs.zencdn.net/5.5.3/video-js.css" rel="stylesheet">
<!-- If you'd like to support IE8 -->
<script src="http://vjs.zencdn.net/ie8/1.1.1/videojs-ie8.min.js"></script>
</head>
<body>
<h1>@ben622 live</h1>
<video id="my-video" class="video-js" controls preload="auto" width="640" height="640"
poster="http://ppt.downhot.com/d/file/p/2014/08/12/9d92575b4962a981bd9af247ef142449.jpg" data-setup="{}">
<source src="你的直播地址" type="rtmp/flv">
<p class="vjs-no-js">播放视频需要启用 JavaScript,推荐使用支持HTML5的浏览器访问。
To view this video please enable JavaScript, and consider upgrading to a web browser that
<a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>
</p>
</video>
<script src="http://vjs.zencdn.net/5.5.3/video.js"></script>
</body>

再次打开浏览器输入地址会出现以下页面




注:因使用Flash所以需要浏览器支持Flash

编译安装ffmpeg

因篇幅有限本文不对ffmpeg做过多介绍,只针对本文进行必要步骤介绍。

step 1.

使用命令下载ffmpeg源码或者读者也可以在官网下载,本文以version3.3.9进行编译,这里不建议使用高版本。

1
wget https://ffmpeg.org/releases/ffmpeg-3.3.9.tar.gz

step 2.

解压并进行编译

1
2
tar -zxvf ffmpeg-3.3.9.tar.gz
cd ffmpeg-3.3.9

使用configure命令进行ffmpeg编译

1
./configure --disable-yasm

等待命令执行完成,和Nginx一样,当出现Makefile文件的时候就可以进行编译安装了

1
make install

ffmpeg编译过程较长(视设备配置而定,大概十多分钟),等待编译完成。编译完成后输入ffmpeg命令检查是否安装成功.

随意分享,您的支持将鼓励我继续创作!