最近在做直播项目,查阅了一下相关资料然后成功搭建服务,在这里整理记录下实现过程以及踩过的坑。

一、直播协议简介:

首先,在搭建服务之前先了解下目前主流的几个直播协议:

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直播配置

nginx服务器配置:

新建目录:用于存放nginx以及nginx-rtmp-moudle模块

mkdir /usr/local/nginx

下载压缩包:进入到创建的nginx目录下下载,这里如果下载不成功可以把https改为http,之前一直可以下载,后面换了一台云服务器后https就下载不了了,不知道是不是被屏蔽的原因,换成http后解决了

cd /usr/local/nginx
wget http://nginx.org/download/nginx-1.12.2.tar.gz
wget https://codeload.github.com/arut/nginx-rtmp-module/zip/master

如果没有wget命令的话执行下面的命令安装

yum -y install wget

解压:

tar -zxvf nginx-1.12.2.tar.gz
unzip nginx-rtmp-module-master.zip 

同理,没有unzip命令的执行下面命令安装

yum -y install unzip

安装nginx以及安装nginx模块之前,先安装一些依赖库:

yum -y install gcc-c++
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel

然后进行nginx-rtmp-module模块的安装:

cd /usr/local/nginx/nginx-1.12.2
#完成rtmp模块安装,=后面输入你的模块包的绝对路径
./configure --add-module=/usr/local/nginx/nginx-rtmp-module-master
make&make install

使用以下命令查看nginx是否启动成功:

cd /usr/local/nginx/sbin
./nginx -t

出现下图提示时表示配置成功

nginx以及相关模块安装完成

配置及启动服务支持hls

由于nginx-rtmp-module支持hls协议,因此我们可以直接在nginx.conf进行配置:

vi /usr/local/nginx/conf/nginx.conf

加入以下内容rtmp模块:(rtmp{}的内容和http{}为同级,位置不要放错)

rtmp {  server {  listen 1935;  #监听的端口chunk_size 4000;  application hls {live on;hls on;hls_path /usr/local/html/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;}#访问权限开启,否则访问这个地址会报403autoindex on;alias /usr/local/html/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';  }

如图:

设置好之后保存文件然后重启服务器:

cd /usr/local/nginx/sbin
./nginx -s reload

直播推流配置

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

在设置->串流 中填写信息:URL为 rtmp://xxx:1935/hls,xxx为你的服务器的IP地址,hls是用来存放流媒体的,”对应的就是conf文件中设置的application名称,流名称可自定义,服务器端生成的m3u8文件就是以此命名的。设置完成之后,点击“开始推流”,推流端的设置就完成了。

三、拉流设置

观看直播就比较简单了,可以简单的使用h5的vedio标签就可以观看了。

可以访问http://xxx:80/hls/abcd.m3u8来观看直播,其中xxx为你的服务器IP地址,后面的abcd就是在推流时候使用的秘钥,是自定义的。或者使用

<video>  <source src="http://xxx:80/hls/abcd.m3u8"/>  <p class="warning">Your browser does not support HTML5 video.</p>
</video>

在此处遇到一个小坑,上述访问地址我是根据网上资料来写的,但是在我自己实际使用时发现服务器把推流时使用的密钥自动生成一个目录,然后把流文件存放到了里面,并不是直接生成abcd.m3u8,如下图

所以我使用的访问地址是http://xxx:80/hls/abcd/index.m3u8,然后就成功拉到直播流了。

搭建Nginx+nginx-rtmp-module的hls流媒体服务器并用OBS进行推流相关推荐

  1. 音视频开发-SRS 4.0开发环境搭建丨webrtc丨FFmpeg丨SRS流媒体服务器开发

    SRS 4.0开发环境搭建 视频讲解如下,点击观看: 音视频开发-SRS 4.0开发环境搭建丨webrtc丨FFmpeg丨SRS流媒体服务器开发 音视频高级开发学习学习资料链接:FFmpeg/WebR ...

  2. linux+家庭+媒体服务器,Linux下搭建可随时随地传输音乐的个人流媒体服务器

    原标题:Linux下搭建可随时随地传输音乐的个人流媒体服务器 mStream是一个免费的.开源的.跨平台的个人音乐流媒体服务器,它可以让你在所有设备之间同步和传输流媒体音乐.它由一个用NodeJS编写 ...

  3. 海康摄像机视频rtsp转rtmp,windows下搭建nginx流媒体服务器,使用ffmpeg推流。

    1.运行nginx服务: cmd命令运行切换目录 cd/ e: cd E:\nginx nginx.exe -c conf/nginx-win.conf 2.ffmpeg视频推流 cmd命令切换目录 ...

  4. HLS流媒体服务器对性能要求,搭建hls直播流媒体服务器有什么要求?

    HLS的基本原理是,当视频流被推送到流媒体服务器时,服务器将接收到的流信息打包成一个全新的TS文件,即切片文件(三块),服务器建立一个m3u8索引文件来维护全新TS段的索引.当播放机获得直播时,从m3 ...

  5. linux音频服务器,mStream - Linux下搭建可随时随地传输音乐的个人流媒体服务器

    mStream是一个免费的.开源的.跨平台的个人音乐流媒体服务器,它可以让你在所有设备之间同步和传输流媒体音乐.它由一个用NodeJS编写的轻量级音乐流媒体服务器,你可以用它把你的音乐从家里的电脑传输 ...

  6. nginx+ffmpeg搭建流媒体服务器

    安装ffmpeg: 下载FFmpeg和libx264的包 ffmpeg-2.4.1.tar.bz2  last_x264.tar.bz2 libx264需要yasm,所以先安装yasm apt-get ...

  7. FFmpeg入门详解之100:搭建Nginx流媒体服务器

    这里小编给大家推荐一款流媒体服务器Nginx,可以实现RTMP和HLS等.搭建完成后,可以使用FFmpeg推流,实现直播功能. 注意:操作环境是Ubuntu18.04, 总共分为几个步骤: 1.安装N ...

  8. 音视频开发(8)---nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器

    nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/redstarofsle ...

  9. nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器

    Nginx本身是一个非常出色的HTTP服务器,FFMPEG是非常好的音视频解决方案.这两个东西通过一个nginx的模块nginx-rtmp-module,组合在一起即可以搭建一个功能相对比较完善的流媒 ...

最新文章

  1. SAP MM不常用功能之供应商Rebate
  2. SAP PM 入门系列2 - IE03显示设备主数据
  3. Python你必须知道的十个库
  4. Java 11 新特性
  5. FF称签约美国百年顶级投行Stifel;Facebook隐私泄露继续发酵,黑客明码标卖聊天信息 | 雷锋早报...
  6. apache服务器的配置文件httpd.conf中有很多内容,请解释如下配置项:
  7. 博图注册表删除方法_技成周报40期 | 三菱、西门子软件安装常见出错解决方法...
  8. Vue 导入文件import、路径@和.的区别
  9. Linux Storage入门学习
  10. 网络连接方式 NAT
  11. 测试 软通动力软件测试机试_5000字长文,计算机保研机试介绍及准备策略!高分过过过!...
  12. ubantu的二三事
  13. LightOJ 1135 - Count the Multiples of 3 线段树
  14. HTML+CSS+JavaScript仿京东购物商城网站 web前端制作服装购物商城 html电商购物网站
  15. 计算机保研er历程分享(浙软、厦大、华师、东南网安、东北、西电、中南......)
  16. 《罗辑思维》第31期:你的女神你不懂
  17. 遇见未来 | 对话朱贤文:PostgreSQL是一匹即将发力的黑马
  18. org.postgresql.util.psqlexception总结
  19. 打死都不要进外包,来看看我在阿里外包的这2年......
  20. mysql 求平均数 (AVG聚合函数)

热门文章

  1. python static方法_浅谈python 类方法/静态方法
  2. 阿里云发生故障会怎样
  3. 分解连续自然数的和_[算法]正整数分解为几个连续自然数之和
  4. wireless-ac 9462驱动下载_英特尔官方更新 Win10 Wi-Fi 和蓝牙驱动程序
  5. 东问西问,终于揭开腾讯面试的真面目!(一、二、三面)
  6. js做网站301跳转
  7. 几何公差之什么是要素?什么是组成要素、导出要素?
  8. 疑似...微软拼音输入法 2007 Bug?
  9. MPB:中科院王光华组土壤和水体环境T4型细菌病毒g23基因多样性研究
  10. 读书日福利|中国网民网络阅读形态观察:多样化破解“阅读过时”预言?!