美文网首页Windows生产力自媒体
linux CentOS7 nginx nginx-rtmp-m

linux CentOS7 nginx nginx-rtmp-m

作者: _情绪疯子 | 来源:发表于2019-02-26 15:51 被阅读0次

    直播配置

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

    相关文章

      网友评论

        本文标题:linux CentOS7 nginx nginx-rtmp-m

        本文链接:https://www.haomeiwen.com/subject/wbbayqtx.html