视频直播服务端环境搭建(Nginx+RTMP)

一、前言

前面介绍了Android中视频直播中的一个重要类ByteBuffer,不了解的同学可以 点击查看 到这里开始,我们开始动手开发了,因为我们后续肯定是需要直播视频功能,然后把视频推流到服务端,本地在进行拉流播放的流程。所以这个过程中,我们需要首先来把服务端这个中间环节的工作搞定,后续再弄推流和拉流功能。现在推流大部分都是使用RTMP/HLS协议的,关于这两个协议的区别:


所以我们服务端搭建就需要用这两个协议,不过本文放心了,不会去手动的编写一套协议代码的,谁叫这个世界属于开源呢?


需要的工具和源码包:

1、VLC观看视频流,ffmpeg工具进行推流

2、nginx源码包,nginx-rtmp-module模块源码包,pcre源码包,openssl源码包


二、安装nginx+rtmp

第一、下载源码包

在github上我们伟大的战斗名族俄罗斯人开发了基于nginx服务器扩展功能模块的rtmp和hls协议功能,所以说,我们的工作非常简单,把源码搞下来编译即可。但是在这个过程中还是有些操作问题的,这里就把流程梳理一遍:

1、首先你得想办法搞一台服务器,不管是买还是借

2、下载nginx源码包+pcre源码包+openssl源码包

这三个源码包网上都有,后续两个包是在编译nginx的时候需要用到。

3、下载nginx-rtmp-module源码包

这个直接去github上去下载即可:https://github.com/arut/nginx-rtmp-module


第二、编译安装

到这里就把所有的源码包都搞齐了,下面把这些源码包放到服务器中的指定目录下:


然后使用tar命令直接解压即可:tar -zxvf xxxx.tar.gz

这时候就开始编译nginx了,首先进入到nginx解压目录下,然后运行命令:

./configure --prefix=/usr/local/nginx_rtmp/nginx-1.9.9

--prefix是nginx编译安装之后的目录

运行报错:./configure: error: the HTTP rewrite module requires the PCRE library


需要添加pcre模块,修改命令,添加 --with-pcre=pcre的源码路径 

./configure --prefix=/usr/local/nginx_rtmp/nginx-1.9.9 --with-pcre=/usr/local/nginx_rtmp/pcre-8.34


再次运行,可以了,但是这时候说明nginx代码没有问题了,下面就需要把rtmp模块加到nginx编译中:

./configure --prefix=/usr/local/nginx_rtmp/nginx-1.9.9 --with-pcre=/usr/local/nginx_rtmp/pcre-8.34  --add-module=/usr/local/nginx_rtmp/nginx-rtmp-module

直接使用 --add-module=nginx的rtmp模块代码路径

运行报错:./configure: error: SSL modules require the OpenSSL library


需要添加openssl模块,添加 --with-openssl=openssl的源码路径

./configure --prefix=/usr/local/nginx_rtmp/nginx-1.9.9 --with-pcre=/usr/local/nginx_rtmp/pcre-8.34 --with-openssl=/usr/local/nginx_rtmp/openssl-1.0.0d --add-module=/usr/local/nginx_rtmp/nginx-rtmp-module

编译运行成功

然后运行make && make install 命令进行安装即可。

注意:

如果想加上HLS功能的,可以使用这个命令:--add-module=/usr/local/nginx_rtmp/nginx-rtmp-module/hls,本文不介绍了HLS协议了,因为配置和RTMP差不多。


三、配置RTMP协议

这时候在编译安装之后的目录中


其中conf目录中存放nginx的配置文件,sbin目录中是运行nginx的命令,那么我们先来看看如何配置nginx,让其具有rtmp功能:

rtmp {
  server {
    listen 1395;
    chunk_size 4096;
    application mylive {
        # enable live streaming
        live on;
    }
  }
}

当然还有很多其他配置,可以在使用的时候根据具体需求添加即可。


这里配置rtmp协议信息,需要注意的是端口和应用名称,比如这里端口是:1395,应用名是:mylive,那么后续推流的地址就是:

rtmp://server.xxx.com:1395/mylive/rtmpstream

其中rtmpstream是随便定义的,但是后续拉流地址必须也是这个地址。


还有一个细节就是,nginx默认的http协议信息中的端口是80,所以在后续运行的时候会出现端口占用的问题,因为这里现在只需用rtmp协议,所以直接把http协议的端口改成不常用的一个端口,让nginx运行成功即可。


四、运行nginx

信息配置好了之后,下面我们就来运行nginx吧,进入sbin目录下,运行命令:


然后查看进程信息:


因为我的机器中运行了两个nginx程序,所以有两个。

再看看1395端口情况:


看到,这时候端口还没有建立,因为我们还是没开始推流呢。


五、测试

上面就把环境搭建好了,下面就来测试一下吧,因为方便测试,直接使用PC上去推一个流做测试即可,后续会详细介绍Android中如何进行推流,PC上推流有一个比较好用的工具:ffmpeg,这个是开源的,用C语言开发的,所以Android平台在使用这个模块推流的话,就需要使用native层做桥接了,github地址:https://github.com/FFmpeg/FFmpeg,不过这个工具在Windows下已经编译好了工具,直接去官网下载即可:https://ffmpeg.org,这个工具包功能很强大的,可以做视频编码,加字幕,水印等效果的。


下载了Windows平台的工具包之后,再把命令配置到环境变量中,直接在命令行中进行推流:

ffmpeg -re -i D:\tmp.mp4 -f flv rtmp://www.wjdiankong.cn:1395/mylive/rtmpstream

这里我把本地的一个mp4文件推流到服务器中,然后这时候我们还需要拉流进行观看,这个就需要一个很常用的流媒体工具:VLC了,可以自行下载这个工具即可,安装之后,在打开选项中,选择网络流媒体:


输入我们需要拉流的地址即可,点击播放,这时候在运行ffmpeg命令进行推流即可:


再推的过程中,我们可以去后台查看端口的状态了:


看到了,这时候端口开始建立了,正在推流,而且这时候拉流也有视频效果了:



为了有动态效果,特定做了gif,图有点大,所以有点卡顿:



六、流程分析

到这里,我们就完成了视频直播的后台环境搭建,也是我们后续要介绍推流和拉流的中间环节,下面在来看一下整个直播的推拉流的流程:


推拉流端都支持PC端和移动端的,采用的协议大部分都是RTMP或者是HLS。而且还有一个比较好的推拉流工具包:FFMpeg,

所以现在很多直播的App,一个主播先出点血花钱买一个比较牛逼的设备(推流设备),然后就可以在家坐着赚钱了,而有一些土豪就开始拉流观看,送钱!!



其实,有时候服务器的结构可能如下:


这里会把推流的视频保存到一个地方,然后既可以支持视频的点播,也可以支持视频的直播了!


最后再来看一下现在很多大公司已经开始开发了整个视频直播功能的SDK,这里看一下腾讯云推出的录制+播放功能的SDK:


他的功能还是很全的,可以支持本地移动设备的推流(视频采集一般就是摄像头和桌面),然后对采集的视频做一些处理,然后在进行拉流播放,可以支持硬件加速,视频解码等功,这个也是我们后续会一一介绍的功能。


因为本文只是介绍环境搭建,所以真正在开发的过程中还会遇到一些问题的,到时候就需要去配置服务端信息了!


七、总结

本文主要介绍了如何搭建视频直播的服务端环境,这个是后续介绍推流和拉流的关键中间点,后续测试都需要这个环境的,我们采用了市面上常用的技术:Nginx+RTMP协议,需要弄到源码包,然后编译安装即可,然后为了验证效果,在Windows中使用了FFMpeg工具进行推流,使用VLC工具进行拉流视频观看,这个流程就算是通了,后续要做的就是如何把Android中的摄像头视频数据和桌面视频数据进行推流,以及拉流观看的功能。

你可能感兴趣的:(视频技术)