本文主要介绍使用 nginx 的 nginx-rtmp-module 模块搭建网络直播平台,需要掌握一点nginx基础。

       大家都接触过当前比较流行的直播平台,如斗鱼,虎牙等。直播平台一个基本流程就是:主播登陆平台,使用摄像头和麦克风等音视频录入设备进行视频录制并同步将视频以流的方式推送到平台。主播的广大粉丝们就可以从平台上拉取主播推送上来的视频流进行实时观看。

       整个过程我们简称:主播在不停的【推流】,粉丝们在不停的【拉流】,受带宽影响,一般直播会有一定的延迟,也就是我们平时观看直播时,经常发现自己看到的画面可能比弹幕上其他粉丝看到画面有滞后。

接下来的内容也使用【推流】和【拉流】这两个专业术语进行整个搭建的过程的描述。

       搭建环境步骤如下:
           1、我们要搞 nginx 必然少不了去官网下载安装包。这里我们使用Linux系统的服务器做为搭建环境。使用集成lua脚本的nginx版本【openresty】,只下载源代码,我们要进行手动编译和安装,因为我们要给nginx服务器加装一个 nginx-rtmp-module 流媒体模块。官方下载地址:http://openresty.org/cn/download.html

           2、nginx源码包下载完成后,再单独下载流媒体模块包: nginx-rtmp-module,下载的依然是源代码,官方下载地址:https://github.com/arut/nginx-rtmp-module 将源代码整个克隆下来。

           3、两个源代码包下载完成后全部上传到我们的linux服务器上,全部解压,比如将 nginx 源代码包解压到 /usr/local/openresty 目录,将 nginx-rtmp-module 解压到 /usr/local/openresty/nginx-rtmp-module

           4、接下来就是进行编译和安装了,依次执行下面四个命令:

cd /usr/local/openresty
  ./configure --add-module=/usr/local/openresty/nginx-rtmp-module
  make
  make install

编译安装过程如出现缺少某某依赖包,我们可以使用yum在线安装对应的包即可,如缺少 gcc 就执行 yum install -y gcc

            5、安装成功后,默认的目录在 /usr/local/openresty/nginx

            6、搞了这么多步骤发现才刚刚装好软件,接下来才是进入正题,搭建直播环境。

            7、编辑nginx的配置文件追加以下内容: /usr/local/openresty/nginx/conf/nginx.conf

rtmp_auto_push on;
rtmp {
  server {
      listen 1935;
      application mytv {
          live on;
          hls on;
          hls_path /usr/local/openresty/nginx/onlive;
          hls_fragment 5s;
      }
  }
}

以上配置的端口1935就是主播【推流】服务的端口,服务名就是上面配置的mytv。主播【推流】上来的视频文件存放在上面配置的hls_path
/usr/local/openresty/nginx/online 该目录需要自行创建。
hls_fragment 5s 将视频切片成5s一个文件。
配置到这里,主播推流服务就搭建好了,那么主播们就可以开始直播咯。完整的推流地址为:rtmp://127.0.0.1:1935/mytv 其中ip改成我们搭建的外网服务器IP。
那么有了推流地址,主播们该怎么将自己的盛世美颜推送到服务器上去呢。别慌,有专门的软件来帮助我们,如流行的:OBS Studio,可以百度到官网进行下载。
运行软件后,我们配置一下推流地址,就可以进行推流操作了。OBS Studio详细操作就不在这描述了,自行百度。

8、到这里,主播们就可以开始直播了。直播效果图如下:

rtmp推流python rtmp推流流程_流媒体


看到这一层层嵌套的画中画,是否回想起当年斗鱼,虎牙主播们直播游戏切回到桌面时的场景。

        9、最后一步就是粉丝们是如何进行【拉流】的。上面已经介绍了,主播们将视频流推送到了服务器上的/usr/local/openresty/nginx/onlive文件夹下面,并以5s一个片段文件保存着,我们可以到这个目录看一下,就会发现有许多文件。其中有一个文件为m3u8结尾的文件,该文件就是我们主播推上来的视频流头文件。粉丝们就是拉取这个文件来进行观看直播的。那么我们只需要将这个目录代理出去就可以了。修改nginx配置文件如下: /usr/local/openresty/nginx/conf/nginx.conf
在配置文件中的http -> server节点追加以下内容

location /onlive {
    root /usr/local/openresty/nginx;
 }

       10、到这里就全部搭建完成。回过头来总结一下发现,搭建过程只添加了两个简单的配置就搞定了,分别是第7步和第9步的两个配置信息就完成了整个环境搭建的过程。

       11、最后粉丝是怎么看主播的直播视频的呢。可以使用html5的video标签,地址配置成第9步配置的代理地址: http://127.0.0.1/onlive/111299.m3u8 即可。其中111299为主播推流时的文件名。这个文件名具体是什么呢。我们再回顾一下斗鱼,虎牙直播平台,会发现,不同主播的直播间是不是都有各自的唯一ID。那么这里的111299就是主播直播间的唯一ID。自己搭建的平台,这个ID就由主播推流时自己设置啦,我们并没有写多余的代码去自动分配哦,有兴趣的小伙伴们可以自己拓展功能哦,例如权限控制。最后放出一张粉丝端在手机上观看直播的截图如下:

rtmp推流python rtmp推流流程_流媒体_02

最后再给大家介绍一个爬坑经验:
       上面我们介绍的步骤是从0开始,全新搭建流媒体直播平台。但是现实情况是:nginx如此流行,各公司服务器上早已经安装好了nginx。但是当初安装nginx时没考虑到要做流媒体,没安装nginx-rtmp-module流媒体模块。那我们如何在不动原来nginx的同时,给加装一个nginx-rtmp-module流媒体模块呢。方法自然是有的。但没有我们想像的那么简直,nginx比较特殊,他是不能随时加装模块的,必须在编译的时候安装。那么我们该怎么呢。别慌,步骤如下:
       1、到nginx的sbin目录。执行 ./nginx -v 查看一下当前nignx是什么版本。然后到官网上下载一个版本号一模一样的源代码包下来。如果你服务器上还保留了当初的安装包,那么恭喜你,这一步省了。直接开始下一步。

       2、接下来的步骤就是和上面全新安装的步骤一致。下载nginx-rtmp-module流媒体模块源代码解压。nginx源代码解压。和上面介绍的全新安装时的第3步一致。接下要特别注意,特别注意,特别注意,重要事件说三遍。执行的命令和全新安装时不同,命令如下:

cd /usr/local/openresty
 ./configure --add-module=/usr/local/openresty/nginx-rtmp-module
 make

不同的是没有最后一个make install指令。千万不要执行install这个指令。他会将你现有的nginx环境覆盖安装一次的,生产环境服务器谨慎操作。

       3、当我们执行完上面三个指令后,我们就可以去/usr/local/openresty/build/nginx-1.15.9./opts/目录下面找到nginx文件。这个就是加装了流媒体模块的nginx可执行文件,我们只需要复制他,覆盖现在正在用的nginx文件。注意备份。覆盖完成后,启动nginx,那么这里的nginx就是有流媒体模块的nginx了。
       到这里就加装模块完成了,如下想安装其他模块,也可按此步骤来。