一、前言

前面介绍了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中的摄像头视频数据和桌面视频数据进行推流,以及拉流观看的功能。

Android中直播视频技术探究之---视频直播服务端环境搭建(Nginx+RTMP)的更多相关文章

  1. Android中直播视频技术探究之---基础知识大纲介绍

    一.前言 最近各种视频直播app到处都是,各种霸屏,当然我们也是需要体验的,关于视频直播的软件这里就不介绍了,在不是技术的人来看,直播是一种潮流,是一种娱乐方式,但是作为一个高技术的,我们除了看看,更 ...

  2. Android中Java反射技术的使用示例

    import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Metho ...

  3. Android菜鸟的成长笔记(14)—— Android中的状态保存探究(上)

    原文:[置顶] Android菜鸟的成长笔记(14)—— Android中的状态保存探究(上) 我们在用手机的时候可能会发现,即使应用被放到后台再返回到前台数据依然保留(比如说我们正在玩游戏,突然电话 ...

  4. Android菜鸟的成长笔记(15)—— Android中的状态保存探究(下)

    原文:Android菜鸟的成长笔记(15)-- Android中的状态保存探究(下) 在上一篇中我们简单了解关于Android中状态保存的过程和原理,这一篇中我们来看一下在系统配置改变的情况下保存数据 ...

  5. 三、直播整体流程 五、搭建Nginx+Rtmp直播流服务

    HTML5实现视频直播功能思路详解_html5教程技巧_脚本之家 https://m.jb51.net/html5/587215.html 三.直播整体流程 直播整体流程大致可分为: 视频采集端:可以 ...

  6. Centos7 搭建Nginx+rtmp+hls直播推流服务器

    1 准备工具 使用yum安装git [root~]# yum -y install git 下载nginx-rtmp-module,官方github地址 // 通过git clone 的方式下载到服务 ...

  7. Android中直播视频技术探究之---桌面屏幕视频数据源采集功能分析

    一.前言 之前介绍了Android直播视频中一种视频源数据采集:摄像头Camera视频数据采集分析 中介绍了利用Camera的回调机制,获取摄像头的每一帧数据,然后进行二次处理进行推流.现在我们在介绍 ...

  8. Android中直播视频技术探究之---采集摄像头Camera视频源数据进行推流(采用金山云SDK)

    一.前言 在之前已经详细介绍了Android中的一种视频数据源:Camera,不了解的同学可以点击进入:Android中Camera使用详解 ,在这篇文章中我们介绍了如何采集摄像头的每一帧数据,然后进 ...

  9. Android中直播视频技术探究之---摄像头Camera视频源数据采集解析

    一.前言 在视频直播中一般都是两种视频数据源,一个是摄像头数据,一个是录制桌面数据,而一般来说美女妹子直播都是来自于摄像头数据,游戏直播都是录制桌面数据的,那么今天就来看看第一个数据源数据采集分析,A ...

随机推荐

  1. python添加tab键提示

    新建一个tab.py脚本 #!/usr/bin/python import sys import readline import rlcompleter import atexit import os ...

  2. 四则运算GUI版本功能展现

    对于四则运算的GUI版本实现支持批量出题,由于我的不积极导致教师没找到对应的连接,现在重新补上链接 http://www.cnblogs.com/liquan/p/5978687.html codin ...

  3. 白盒测试的学习之路----(五)TestNG的参数分离

    之前的测试用例直接嵌套在代码中,不便于维护和测试设计,应该单独把测试用例放在excel内,然后程序从中读取数据到相应的接口内即可.使用ava程序对Microsoft Office格式档案读和写的功能提 ...

  4. 深入了解webservice_概念总结

    最近公司需要对java web端的第三方接口进行测试,使用WebService+TestNG实现,TsetNg是常用的自动化测试框架,这就不介绍了. WebService是一种跨编程语言和跨操作系统平 ...

  5. 启用 TStringGrid 的自画功能,并避免重影

    FMX 控件的 TStringGrid 下,有时为了让不同行或不同 Cell 的显示颜色.字体等有各种不同的颜色, 必须采用自画, 即在其 OnDrawColumnCell 事件中写自己的控制代码显示 ...

  6. python any()和all()用法

    #any(x)判断x对象是否为空对象,如果都为空.0.false,则返回false,如果不都为空.0.false,则返回true #all(x)如果all(x)参数x对象的所有元素不为0.''.Fal ...

  7. 内存泄露:*.hprof

    使用Memory Analyzer tool(MAT)分析内存泄漏 转账地址:http://www.blogjava.net/rosen/archive/2010/06/13/323522.html ...

  8. 让ecshop用户登录评价以可择匿名评价

    ECSHOP 默认的程序 是 当用户登录后,对商品商品评价是不是能匿名评价的. 有些店铺设置了只能登录评价,但客户又不想显示自己的账号名称.这时候 这功能 就可以派上用场了 1在 comment.ph ...

  9. postgresql 热备与恢复

    一. PostgreSQL热备份的过程一般为: 数据库中执行:pg_start_backup() ; 然后使用操作系统的tar或 cp命令拷贝 PostgreSQL数据文件. 数据库中执行:pg_st ...

  10. [ios][opengles]opengles在ios上的透明问题

    关于透明,OpenGL/ES 中可以通过 blend (混色) 来简单实现,混色的基本原理就是把要绘制的物体的颜色与屏幕上已经绘制好的颜色以一定比例来混合,最后的颜色看上去就像半透明一样.要使用混合先 ...