linux CentOS7 nginx nginx-rtmp-module搭建直播

时间:2019-12-14
本文章向大家介绍linux CentOS7 nginx nginx-rtmp-module搭建直播,主要包括linux CentOS7 nginx nginx-rtmp-module搭建直播使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

直播配置

1. 安装 Nginx 依赖软件

yum -y install gcc gcc-c++ autoconf automake make
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel 

2. 安装nginx与rtmp模块

l 首先进入local目录

cd /usr/local

l 下载nginx(没有安装wget的请安装,安装命令:yum -y install wget)

wget  http://nginx.org/download/nginx-1.13.12.tar.gz

l 解压

tar  zxvf  nginx-1.13.12.tar.gz

l 创建nginx安装目录与模块目录

mkdir  -p  /usr/local/nginx/module

l 创建视频数据存放位置

  mkdir  -p   /usr/local/nginx/myapp

l 进入到/usr/local/nginx/module目录

cd   /usr/local/nginx/module

l 下载nginx-rtmp-module,下载后的文件夹名叫nginx-rtmp-module(没有安装git的请安装,执行语句的时候没有git会提示你)

git clone  https://github.com/arut/nginx-rtmp-module.git

l 进入解压后的nginx目录中,指定nginx安装目录并且指定了安装的模块

cd  /usr/local/nginx-1.13.12/

./configure --prefix=/usr/local/nginx --add-module=/usr/local/nginx/module/nginx-rtmp-module(此处一句命令)

l //编译并安装

make && make install

l //启动nginx

/usr/local/nginx/sbin/nginx

此时如果没有问题,那么你就可以访问http://127.0.0.1了,会出现welcome界面。
3. 配置nginx与nginx-rtmp-module

// 在nginx-rtmp-module中带有一个nginx.conf的配置文件,把它覆盖到nginx中的配置文件cp /usr/local/nginx/module/test/nginx.conf /usr/local/nginx/conf 询问你是否覆盖,输入y 并回车
// 编辑nginx配置文件,使用vim打开
vim /usr/local/nginx/conf/nginx.conf
//(按i进入编辑模式,编辑完成后esc退出, 输入:wq 保存并退出)
//修改nginx.conf文件,修改三处
1.Rtmp节点下,在live on ;下加入
    hls on;
    hls_path  /usr/local/nginx/myapp;
 
nginx.conf
2.在http 节点下,修改两个root的路径
    location /rtmp-publisher {
            root  /usr/local/nginx/module/nginx-rtmp-module/test;
        }

        location / {
            root /usr/local/nginx/module/nginx-rtmp-module/test/www;
        }
 
nginx.conf

修改之后保存即可,接下来修改web界面。
第一个页面
修改文件/usr/local/nginx/module/nginx-rtmp-module/test/www/index.html,修改ip以及端口(以下192.168.1.7为rtmp服务器ip)


 
index.html

第二个页面
修改文件/usr/local/nginx/module/nginx-rtmp-module/test/www/record.html,修改ip以及端口

 
record.html

第三个页面(点播配置)
创建视频存放位置
mkdir -p /usr/local/nginx/vod/flvs
上传一个mp4格式的视频到/usr/local/nginx/vod/flvs下(以2.mp4为例)
修改文件/usr/local/nginx/module/nginx-rtmp-module/test/rtmp-publisher/player.html,修改ip以及端口
 
player.html

4.这时需要重新加载配置,使用命令
/usr/local/nginx/sbin/nginx -s reload

5.如果启动没有问题,那么访问端口刚才已经修改为8080那么你看到的界面应该是下图

 
nginx首页

6.下面配置直播工具 OBS

安装后打开界面在设置中选中,串流,类型选择: 自定义流媒体服务器

 
OBS配置

配置图像输出:
在来源处点+号,选择视频捕捉设备,然后在设备处选择你的摄像头即可。
 
抓取窗口

这是可以开始直播了,点击右侧开始串流,然后打开web地址,192.168.1.7:8080就可以看见了,直播完成
 
点播

访问http://192.168.31.41:8080/rtmp-publisher/player.html即可查看上传的视频,点播完成

常见的直播协议

国内常见的直播协议有几个:RTMP、HLS、HTTP-FLV
RTMP,全称 Real Time Messaging Protocol,即实时消息传送协议。Adobe 公司为 Flash 播放器和服务器之间音视频数据传输开发的私有协议。工作在 TCP 之上的明文协议,默认使用端口 1935。协议中的基本数据单元成为消息(Message),传输的过程中消息会被拆分为更小的消息块(Chunk)单元。最后将分割后的消息块通过 TCP 协议传输,接收端再反解接收的消息块恢复成流媒体数据。
RTMP 主要有以下几个优点:RTMP 是专为流媒体开发的协议,对底层的优化比其它协议更加优秀,同时它 Adobe Flash 支持好,基本上所有的编码器(摄像头之类)都支持 RTMP 输出。现在 PC 市场巨大,PC 主要是 Windows,Windows 的浏览器基本上都支持 Flash。另外RTMP适合长时间播放,曾经有过测试,联系 100 万秒,即 10 天多连续播放没有出现问题。最后 RTMP 的延迟相对较低,一般延时在 1-3s 之间,一般的视频会议,互动式直播,完全是够用的。
当然 RTMP 并没有尽善尽美,它也有不足的地方。一方面是它是基于 TCP 传输,非公共端口,可能会被防火墙阻拦;另一方面,也是比较坑的一方面是 RTMP 为 Adobe 私有协议,很多设备无法播放,特别是在 iOS 端,需要使用第三方解码器才能播放。
FLV(Flash Video) 是 Adobe 公司推出的另一种视频格式,是一种在网络上传输的流媒体数据存储容器格式。其格式相对简单轻量,不需要很大的媒体头部信息。整个 FLV 由 The FLV Header, The FLV Body 以及其它 Tag 组成。因此加载速度极快。采用 FLV 格式封装的文件后缀为 .flv。
而我们所说的 HTTP-FLV 即将流媒体数据封装成 FLV 格式,然后通过 HTTP 协议传输给客户端。
HTTP-FLV 依靠 MIME 的特性,根据协议中的 Content-Type 来选择相应的程序去处理相应的内容,使得流媒体可以通过 HTTP 传输。相较于 RTMP 协议,HTTP-FLV 能够好的穿透防火墙,它是基于 HTTP/80 传输,有效避免被防火墙拦截。除此之外,它可以通过 HTTP 302 跳转灵活调度/负载均衡,支持使用 HTTPS 加密传输,也能够兼容支持 Android,iOS 的移动端。
说了这么多优点,也来顺便说下 HTTP-FLV 的缺点,由于它的传输特性,会让流媒体资源缓存在本地客户端,在保密性方面不够好。因为网络流量较大,它也不适合做拉流协议。
上述两个协议都是有Adobe公司推出的,而下面要讲的
HLS (HTTP Live Streaming) 则是苹果公司基于 HTTP 的流媒体传输协议。主要应用于 iOS 设备,包含(iPhone, iPad, iPod touch) 以及 Mac OSX 提供音视频直播服务和录制内容(点播)等服务。
相对于常见的流媒体协议,HLS 最大的不同在于它并不是一下请求完整的数据流。它会在服务器端将流媒体数据切割成连续的时长较短的 ts 小文件,并通过 M3U8 索引文件按序访问 ts 文件。客户端只要不停的按序播放从服务器获取到的文件,从而实现播放音视频。
相较 RTMP 而言,使用 HLS 在 HTML5 页面上实现播放非常简单:
直接:

<video src = "xxx.m3u8" controls> </video>

间接

<video  controls>
    <souce src = "xxx.m3u8"></souce>
</video>

HLS 的优势:

Apple 的全系列产品支持:由于 HLS 是苹果提出的,所以在 Apple 的全系列产品包括 iPhone、 iPad、safari 都不需要安装任何插件就可以原生支持播放 HLS, 现在 Android 也加入了对 HLS 的支持。
穿透防火墙。基于 HTTP/80 传输,有效避免防火墙拦截
性能高。通过 HTTP 传输, 支持网络分发,CDN 支持良好,且自带多码率自适应,Apple 在提出 HLS 时,就已经考虑了码流自适应的问题。

HLS 的劣势:

实时性差,延迟高。HLS 的延迟基本在 10s+ 以上
文件碎片。特性的双刃剑,ts 切片较小,会造成海量小文件,对存储和缓存都有一定的挑战


 
流媒体协议 RTMP, HTTP-FLV, HLS 简单对比

RTMP 协议为流媒体而设计,在推流中用的比较多,同时大多 CDN 厂商支持RTMP 协议。
HTTP-FLV 使用类似 RTMP流式的 HTTP 长连接,需由特定流媒体服务器分发的,兼顾两者的优点。以及可以复用现有 HTTP 分发资源的流式协议。它的实时性和 RTMP 相等,与 RTMP 相比又省去了部分协议交互时间,首屏时间更短,可拓展的功能也更多。
HLS 作为苹果提出的直播协议,在 iOS 端占据了不可撼动的地位,Android 端也同时提供相应的支持。
又拍云一站式直播解决方案基于又拍云 CDN,支持 RTMP、HTTP-FLV 和 HLS 三大直播协议,并且通过智能调度、链路保障、追帧处理、丢帧处理以及业界首创的 HLS+ 技术,将 RTMP、HTTP-FLV 直播延迟控制在1秒内,将 HLS 直播延时控制在 4 秒左右。



作者:_情绪疯子
链接:https://www.jianshu.com/p/85f54145675c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原文地址:https://www.cnblogs.com/360minitao/p/12039707.html