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/nginx-rtmp-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;

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;
        }

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

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

第三个页面(点播配置)
创建视频存放位置
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以及端口

4.这时需要重新加载配置,使用命令
/usr/local/nginx/sbin/nginx -s reload
5.如果启动没有问题,那么访问端口刚才已经修改为8080那么你看到的界面应该是下图

6.下面配置直播工具 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 协议为流媒体而设计,在推流中用的比较多,同时大多 CDN 厂商支持RTMP 协议。
HTTP-FLV 使用类似 RTMP流式的 HTTP 长连接,需由特定流媒体服务器分发的,兼顾两者的优点。以及可以复用现有 HTTP 分发资源的流式协议。它的实时性和 RTMP 相等,与 RTMP 相比又省去了部分协议交互时间,首屏时间更短,可拓展的功能也更多。
HLS 作为苹果提出的直播协议,在 iOS 端占据了不可撼动的地位,Android 端也同时提供相应的支持。
又拍云一站式直播解决方案基于又拍云 CDN,支持 RTMP、HTTP-FLV 和 HLS 三大直播协议,并且通过智能调度、链路保障、追帧处理、丢帧处理以及业界首创的 HLS+ 技术,将 RTMP、HTTP-FLV 直播延迟控制在1秒内,将 HLS 直播延时控制在 4 秒左右。
linux CentOS7 nginx nginx-rtmp-module搭建直播的更多相关文章
- linux(centos7) 安装nginx
		linux(centos7) 安装nginx 1.14(stable) 版本 Nginx配置文件常见结构的从外到内依次是「http」「server」「location」等等,缺省的继承关系是从外到内, ... 
- Linux(CentOS7)下Nginx安装
		记录一下 Linux(CentOS7) 下 Nginx 安装过程 一.准备工作 版本说明: Linux版本:CentOS 7 64位 Nginx版本:nginx-1.20.0 1. 下载安装文件 采用 ... 
- 使用 nginx 和 rtmp 插件搭建视频直播和点播服务器
		使用 nginx 和 rtmp 模块 ,可以很容易地搭建一个视频直播和点播服务器出来. 首先,看一下最经典的参考文献: How to set up your own private RTMP serv ... 
- Linux CentOS7系统配置nginx服务器
		作为一个以服务器为主要市场的操作系统,主要就是对客户端的请求进行响应,进行处理的.在经历过系统镜像安装和本地配置好ssh功能后,接下来进行服务器的安装,这里我以nginx为主,介绍一下如何安装ngin ... 
- linux centos7 安装nginx并启动
		Linux下安装Nginx完整教程及常见错误解决方案:https://blog.csdn.net/chenxiaochan/article/details/63688346 CentOS 7 安装Ng ... 
- Linux(Centos7)下redis5集群搭建和使用
		1.简要说明 2018年十月 Redis 发布了稳定版本的 5.0 版本,推出了各种新特性,其中一点是放弃 Ruby的集群方式,改为 使用 C语言编写的 redis-cli的方式,是集群的构建方式复杂 ... 
- nginx的rtmp搭建流媒体服务器实现直播流
		最近自己搞了一个用nginx的rtmp来搭建流媒体服务器,从而实现直播的过程,参考了网上很多资料,有些资料对于初学者来说比较难以理解,在此将我搭建的过程记录下来,分享给大家. 1.下载nginx-rt ... 
- Nginx学习之配置RTMP模块搭建推流服务
		写在开始 小程序升级实时音视频录制及播放能力,开放 Wi-Fi.NFC(HCE) 等硬件连接功能.同时提供按需加载.自定义组件和更多访问层级等新特性,增强了第三方平台的能力,以满足日趋丰富的业务需求. ... 
- VMware虚拟机中的CentOS7安装Nginx后本机无法访问的解决办法
		VMware虚拟机中的CentOS7安装Nginx后本机无法访问的解决办法 在linux上安装nginx 请参考:Linux Centos7 安装 nginx 在虚拟机centos7上安装nginx之 ... 
随机推荐
- spring cloud学习笔记五  网关服务zuul
			网关服务是指,客户端发送的请求不用直接访问特定的微服务接口,而且是经过网关服务的接口进行交互,网关服务再去到特定的微服务中进行调用. 网关服务的路由功能和Nginx的反向代理一样,所有的服务都先会 ... 
- jmeter 参数化4_Function Helper中的函数
			Function Helper中的函数: 可作为其他参数化方式的补充项,如:随机数生成的函数${__Random(,,)} 操作路径:操作路径:Options-->Function Helpe ... 
- python-zmail发送邮件
			import zmail #发送测试报告到邮件 with open(r'F:\asus\auto_file\unittest_html\2019-06-30 10-31-03report.html', ... 
- js 弹窗并定时关闭
			1. $('input').click(function() { prompt('点击成功', 2000) }) function prompt(newName, time, fn) { var $d ... 
- cocos2D-X Doc
			{ //https://docs.cocos2d-x.org/api-ref/index.html //https://docs.cocos.com/cocos2d-x/manual/zh/sprit ... 
- c++ 预处理指令#define, #endif...
			常见的预处理指令有: # 空指令,无任何效果 # include 包含一个源代码文件 #define 定义宏 #undef 取消已定义的宏 #if 如果给定条件为真,则编译下面代码 #ifdef 如果 ... 
- 各大漏洞平台及SRC的区别和如何批量刷漏洞
			批量刷漏洞: 01刷指纹->02刷原始漏洞->03刷CMS->04刷指定政府.教育->05刷众测平台->06刷SRC->07刷国内外.活动 搜索引擎: 百度.goo ... 
- STM32 TIM3 PWM输出 4路
			一.设置TIM3的GPIO为推挽输出 void TIM3_IOConfig(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClo ... 
- 「NOI2017」蔬菜 解题报告
			「NOI2017」蔬菜 首先考虑流 可以从 \(s\) 流入表示得到蔬菜,流出到 \(t\) 表示卖出蔬菜,给每个蔬菜拆点,并给它它每天应得的蔬菜. 但是我们没办法直接给,注意到如果把变质看成得到并可 ... 
- SSM + MySQL批量删除操作
			最近项目中有个购物车功能需要能够选中商品,然后批量删除的操作,也可以单个删除,其实代码很简单就能实现. 这里需要注意的就是你前端是怎么传值的,我这里采用的数组的形式,用 ‘,’隔开. 然后控制层代码如 ... 
