#后端笔记#在CentOS上利用 nginx + nginx-rtmp-module 搭建基于HLS协议的直播服务器

一、直播协议简介:

搭建之前,先简单说说现在网上主流的直播协议:

1、RTMP:

     实时消息传输协议,Real Time Messaging Protocol,是 Adobe Systems 公司为 Flash 播放器和服务器之间音频、视频和数据传输开发的开放协议。协议基于 TCP,是一个协议族,包括 RTMP 基本协议及 RTMPT/RTMPS/RTMPE 等多种变种。RTMP 是一种设计用来进行实时数据通信的网络协议,主要用来在 Flash/AIR 平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。这种方式的实时性比较强,基本能保证延迟在1-2s内,是现在国内直播主要采用的方式之一;不过使用这种协议,就必须安装flash,而H5、IOS、Android并不能原生支持flash,因此这种协议能流行多久,就不得而知了,毕竟移动端才是现在的主流。

2、HLS:

     hls是Apple推出的直播协议,是通过视频流切片成文件片段来直播的。客户端首先会请求一个m3u8文件,里面会有不同码率的流,或者直接是ts文件列表,通过给出的ts文件地址去依次播放。在直播的时候,客户端会不断请求m3u8文件,检查ts列表是否有新的ts切片。这种方式的实时性较差,不过优势是H5、IOS、Android都原生支持。

3、HTTP-FLV:

      HTTP-FLV就是对RTMP协议的封装,相比于RTMP,它是一个开放的协议。因此他具备了RTMP的实时性和RTMP不具备的开发性,而且随着flv.js出现(感谢B站),使得浏览器在不依赖flash的情况下,播放flv视频,从而兼容了移动端,所以现在很多直播平台,尤其是手机直播平台,都会选择它。

 

二、HLS直播配置

1、nginx服务器配置:

     由于nginx-rtmp-module也支持HLS协议,因此我们可以直接在nginx.conf进行配置:(上篇博文介绍了基于rtmp协议的直播和nginx直播服务器的搭建,这里就直接跳过了,想了解nginx服务器搭建的可以点击这里

在rtmp配置那里添加一个应用hls:

application hls {
            live on;
            hls on;
            hls_path /usr/local/vod/hls;#视频流存放地址
            hls_fragment 5s;
            hls_playlist_length 15s;
            hls_continuous on; #连续模式。
            hls_cleanup on;    #对多余的切片进行删除。
            hls_nested on;     #嵌套模式。
        }

在http里添加一个直播流存放的地址:

location /hls {  #添加视频流存放地址。
        types {
            application/vnd.apple.mpegurl m3u8;
            video/mp2t ts;
        }
        #访问权限开启,否则访问这个地址会报403
        autoindex on;
        alias /usr/local/vod/hls;#视频流存放地址,与上面的hls_path相对应,这里root和alias的区别可自行百度
        expires -1;
        add_header Cache-Control no-cache;
        #防止跨域问题
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';  
    }

设置了这个地址映射后,访问http://ip:8091/hls就可以看到存放在服务器上的ts切片文件和m3u8文件了,服务器的实际地址对应的就是alias的地址。autoindex记得一定要置成on,这样才有权限访问直播文件,否则直播就无法成功(我被这个坑,坑了两天!)

这样hls的配置基本就完成了,记得设置后重启服务器。

2、直播推流配置

      推流指的就是直播端将视频流推到设定的服务器位置。这里我使用的是obs进行推流:

    

URL中“hls”对应的就是conf文件中设置的application名称,流名称可自定义,服务器端生成的m3u8文件就是以此命名的。设置完成之后,点击“开始推流”,推流端的设置就完成了。

3、直播拉流的配置

     拉流指的就是将视频流从服务器拉取到客户端进行播放。这里我是将视频拉流到网页上进行显示,代码如下:

(这里直接截图了,要源码的话,网上有很多,直接copy下来就行了)

注意拉流的地址是http开头的,并且要带上nginx服务器对应的端口号。

4、测试效果:

OK!HLS直播完成!

现在已经攻克了RTMP协议和HLS协议,下面还将研究一下HTTP-FLV,现在很多直播平台都是这种模式了,也是直播的发展去世了,赶紧了解起来!

 

 

 

 

    

   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值