直播配置

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;
 
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 秒左右。

linux CentOS7 nginx nginx-rtmp-module搭建直播的更多相关文章

  1. linux(centos7) 安装nginx

    linux(centos7) 安装nginx 1.14(stable) 版本 Nginx配置文件常见结构的从外到内依次是「http」「server」「location」等等,缺省的继承关系是从外到内, ...

  2. Linux(CentOS7)下Nginx安装

    记录一下 Linux(CentOS7) 下 Nginx 安装过程 一.准备工作 版本说明: Linux版本:CentOS 7 64位 Nginx版本:nginx-1.20.0 1. 下载安装文件 采用 ...

  3. 使用 nginx 和 rtmp 插件搭建视频直播和点播服务器

    使用 nginx 和 rtmp 模块 ,可以很容易地搭建一个视频直播和点播服务器出来. 首先,看一下最经典的参考文献: How to set up your own private RTMP serv ...

  4. Linux CentOS7系统配置nginx服务器

    作为一个以服务器为主要市场的操作系统,主要就是对客户端的请求进行响应,进行处理的.在经历过系统镜像安装和本地配置好ssh功能后,接下来进行服务器的安装,这里我以nginx为主,介绍一下如何安装ngin ...

  5. linux centos7 安装nginx并启动

    Linux下安装Nginx完整教程及常见错误解决方案:https://blog.csdn.net/chenxiaochan/article/details/63688346 CentOS 7 安装Ng ...

  6. Linux(Centos7)下redis5集群搭建和使用

    1.简要说明 2018年十月 Redis 发布了稳定版本的 5.0 版本,推出了各种新特性,其中一点是放弃 Ruby的集群方式,改为 使用 C语言编写的 redis-cli的方式,是集群的构建方式复杂 ...

  7. nginx的rtmp搭建流媒体服务器实现直播流

    最近自己搞了一个用nginx的rtmp来搭建流媒体服务器,从而实现直播的过程,参考了网上很多资料,有些资料对于初学者来说比较难以理解,在此将我搭建的过程记录下来,分享给大家. 1.下载nginx-rt ...

  8. Nginx学习之配置RTMP模块搭建推流服务

    写在开始 小程序升级实时音视频录制及播放能力,开放 Wi-Fi.NFC(HCE) 等硬件连接功能.同时提供按需加载.自定义组件和更多访问层级等新特性,增强了第三方平台的能力,以满足日趋丰富的业务需求. ...

  9. VMware虚拟机中的CentOS7安装Nginx后本机无法访问的解决办法

    VMware虚拟机中的CentOS7安装Nginx后本机无法访问的解决办法 在linux上安装nginx 请参考:Linux Centos7 安装 nginx 在虚拟机centos7上安装nginx之 ...

随机推荐

  1. Git最全总结

    一个小时学会Git   目录 一.版本控制概要 工作区 暂存区 本地仓库 远程仓库 1.1.什么是版本控制 1.2.常用术语 1.3.常见的版本控制器 1.4.版本控制分类 1.4.1.本地版本控制 ...

  2. NET Core SDK 已安装在VS2017不可见

    本地装了6个版本的net core sdk,但是在vs2017,vs2019 只是显示1.0和1.1: 重装,重启了好几遍也没用,没想到是环境变量PATH顺序问题,将x64的放在x86前,就OK了~:

  3. webpack CSS处理loader

    loader概念: 首先来介绍一下loader,之前我们用webpack来处理我们写的js代码,并且webpack会自动处理js之间相关的依赖.但是,在开发中我们不仅仅有基本的js代码处理,我们也需要 ...

  4. 1,MySQL常用函数

    一,MySQL聚合函数 1,AVG()函数 AVG()函数是一个聚合函数,它用于计算一组值或表达式的平均值. AVG()函数的语法如下: AVG(DISTINCT expression) 例如有如下p ...

  5. html插入链接的实现方法

    下面就为大家带来一篇html插入链接的实现方法.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧   每个网页都已一个地址,用URL()标识,通常在网站内部创建链接时,通常 ...

  6. thinkphp 配置格式

    ThinkPHP支持多种格式的配置格式,但最终都是解析为PHP数组的方式. PHP数组定义 返回PHP数组的方式是默认的配置定义格式,例如: //项目配置文件 return [ // 默认模块名 'd ...

  7. <三剑客> 老二:sed命令用法

    sed命令的用法: sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space ...

  8. GH001 on github

    remote: warning: GH001: Large files detected. You may want to try Git Large File Storage - https://g ...

  9. tomcat正常启动输入localhost:8080显示404错误

    找了半天才解决. 看这个贴子: https://www.cnblogs.com/lovelanglangyou/p/7410937.html 简而言之: 需要修改eclipse中的server配置,e ...

  10. mac 上查看python3的各种安装路径

    1.mac chromedriver的安装目录:/usr/local/bin 2.mac htmltestrunner的存放目录:命令行下 import sys sys.path/Library/Fr ...