文档章节

Android中直播视频技术探究之---视频直播服务端环境搭建(Nginx+RTMP)

我爱睡觉
 我爱睡觉
发布于 2017/06/24 16:36
字数 2163
阅读 7
收藏 0

一、前言

前面介绍了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技术实时推送



本文转载自:http://blog.csdn.net/jiangwei0910410003/article/details/51996940

我爱睡觉
粉丝 3
博文 2120
码字总数 0
作品 0
南昌
《视频直播技术详解》系列之一:视频采集和处理

直播中的各个环节: 1.采集 采集是播放环节中的第一环,iOS 系统因为软硬件种类不多,硬件适配性较好,所以比较简单。Android 则不同,市面上硬件机型非常多,难以做到一个库适配所有硬件。P...

ljianbing
06/26
0
0
腾讯技术分享:微信小程序音视频技术背后的故事

1、引言 微信小程序自2017年1月9日正式对外公布以来,越来越受到关注和重视频,小程序上的各种技术体验也越来越丰富。音视频作为高速移动网络时代下增长最快的应用形式之一,在微信小程序中也...

JackJiang2011
07/21
0
0
ARCore 1.0 实践:在直播场景中加入AR特效

作者简介:王颖,声网Agora.io 媒体引擎高级工程师,负责媒体引擎设计开发和多平台扩展 ARKit 和 ARCore 给我们 AR 应用的开发带来了极大便利。ARCore 在 2 月 24 日发布了 1.0 正式版本,A...

Agora
03/09
0
0
如何实现微信小程序与Native App多人连麦直播?

微信在去年年底开放了小程序直播接口。小程序从仅适用于阅读、生活服务、工具等应用的流量入口,成为了许多音视频应用的又一个新平台。新功能的开放让更多应用可以利用微信的熟人社交链为应用...

Agora
04/18
0
0
【掘金小报】 第十五期 用 slack 和 hubot 搭建你自己的运维机器人

掘金小报主打分享优质深度技术内容,技术内容分:前端、后端、Android、iOS、产品设计、工具资源和一些有趣的东西。 与标题相关文章为最后一篇文章。 【译】带你入门 CSS Grid 布局 三月中旬...

膜法小编
2017/05/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

基于TP5的微信的公众号获取登录用户信息

之前讲过微信的公众号自动登录的菜单配置,这次记录一下在TP5项目中获取自动登录的用户信息并存到数据库的操作 基本的流程为:微信设置自动登录的菜单—>访问的URL指定的函数里获取用户信息—...

月夜中徘徊
今天
0
0
youTrack

package jetbrains.teamsys.license.runtime; 计算lis package jetbrains.ring.license.reader; 验证lis 安装后先不要生成lis,要把相关文件进行替换 ring-license-checker-1.0.41.jar char......

max佩恩
今天
0
0
12.17 Nginx负载均衡

Nginx负载均衡 下面的dig看到可以返回2个IP,就是解析出来的IP,这样我们可以做负载均衡。 dig www.qq.com 1.vim /usr/local/nginx/conf/vhost/fuzai.conf 2.添加如下配置 upstream qq //定义...

芬野de博客
今天
0
0
SSE(Server Send Event 服务端发送事件)

package com.example.demo.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframe......

Canaan_
今天
0
0
jvm调优

1.jvm运行模式 client模式:启动快,占用内存少,jit编译器生成代码的速度也更快. server模式:主要优势在于代码优化功能,这个功能对于服务器应用而言尤其重要. tiered server模式:结合了client与...

Funcy1122
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部