基于nginx-rtmp-module 搭建直播系统

  • 1. nginx基础
  • 2. nginx-rtmp-module基础
  • 3. 实验操作
    • 3.1 安装nginx
    • 3.2 NRM的搭建
    • 3.3 推流
    • 3.4 拉流
    • 3.5 实验效果展示
    • 3.6 如何使用NRM支持HLS直播
  • 4. nginx-rtmp-module进阶
    • 4.1 推/拉流与串流码
    • 4.2 Control控制器
      • 4.2.1 record命令
      • 4.2.2 drop命令
      • 4.2.3 redirect命令

1. nginx基础


2. nginx-rtmp-module基础

3. 实验操作

3.1 安装nginx

从官网下载稳定版本 nginx:http://nginx.org/en/download.html

tar -zxvf nginx-1.12.0.tar.gz

然后使用configure进行配置,该脚本定义系统的各方面配置,最终输出makefile文件

cd nginx-1.12.0
./configure

nginx 源码编译安装的方式依赖:zlib, pcre, openssl 库

编译安装

make && make install

验证是否安装成功

/usr/local/nginx/sbin/nginx -v

3.2 NRM的搭建

首先需要从github上下载rmtp模块:https://github.com/arut/nginx-rtmp-module/releases

配置nrm到nginx中

./configure --add-module=/User/xiaopeng/NRM --prefix=/usr/local/nginx --with-debug make && make install

拷贝一份nginx.conf 命名为 live.conf ,配置RTMP直播,具体内容参考如下

worker_processes  1;events {worker_connections  1024;
}rtmp {server {listen 1935;application mylive {live on;}}
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       8888;server_name  localhost;location / {root   html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}}

验证安装

启动nginx

./nginx -c /xx/xx/live.conf # 自己的nginx配置位置

3.3 推流

使用了ffmpeg工具,具体安装方法为:(以mac为例)

brew install ffmpeg

随机从本地挑出一个视频文件作为测试,使用ffmpeg推流工具:

ffmpeg -re -stream_loop -1 -i finereportvideo.mp4 -r 25 -b 4M -f flv rtmp://192.168.199.208:1935/mylive/6

3.4 拉流

使用ffplay工具进行拉流测试:

ffplay "rtmp://192.168.199.208:1935/mylive/6" # 注意具体位置为自己局域网的ip地址和地址

这样就可以在局域网内通过该rtmp地址观看直播了。

3.5 实验效果展示

在局域网内的两个pc端同时观看该直播:

3.6 如何使用NRM支持HLS直播

  • 在本地创建一个目录用于保存m3u8和ts文件

    mkdir /Users/xiaopeng/m3u8file
    
  • 修改/usr/local/nginx/conf/live.conf配置文件
rtmp {server {listen 1935;application mylive {live on; # 开始直播hls on; # 开启hls直播hls_path /Users/xiaopeng/m3u8file; # 配置hls m3u8文件存放地址}}
}
  • 由于hls协议是基于HTTP协议的,所以无法通过RTMP协议去访问HLS m3u8文件,因此在nginx的http上下文部分,需要增加配置以支持访问m3u8文件。
 server {listen       8888;server_name  localhost;location / {root   html;index  index.html index.htm;}location /mylive_hls {types {application/vnd.apple.mpegurl m3u8; # m3u8配置video/mp2t ts; # ts分片配置}alias /Users/xiaopeng/m3u8file; # 指向m3u8文件目录add_header Cache-Control no-cache; # 禁止缓存}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
  • 推流
ffmpeg -re -stream_loop -1 -i finereportvideo.mp4  -vcodec libx264 -acodec aac -f flv rtmp://192.168.199.208:1935/mylive/44
  • 使用ffplay测试播放,输入如下地址
ffplay "http://192.168.199.208:8888/mylive_hls/44.m3u8"
  • 可以检查文件目录/Users/xiaopeng/m3u8file是否有m3u8以及ts文件的输出

    可以发现,通过HLS的相关配置,可以轻松访问到m3u8和ts文件,通过location和type中配置客户端,可以通过基于http协议来访问m3u8和ts文件播放流媒体。

4. nginx-rtmp-module进阶

4.1 推/拉流与串流码

在直播技术中,会涉及推流和拉流。
所谓推流:将流媒体推送到流媒体服务器的过程;
所谓拉流:将服务器获取视频数据的过程。

在上面的实验中,将一个视频文件推送到本地搭建的RTMP服务器地址命令行:

ffmpeg -i my.mp4 -vcode 视频编码库 -acodec 音频编码库 -f -flv rtmp://xxxx

需要说明的是,application之后的参数即为串流码,被用来区分不同的直播流。

对于上述例子,application为mylive,串流码为44.

又例如,下面的三路直播流地址,第一个和第三个虽然流串码相同,但是application不同,故也为不同的直播流:

rtmp://127.0.0.1:1935/live/123
rtmp://127.0.0.1:1935/live/234
rtmp://127.0.0.1:1935/lv/123

4.2 Control控制器

control控制器是http模块中,基于http协议从外部来控制rtmp的模块。通过control控制器,就可以使用诸如record、drop和redirect的命令来实现不同业务需求。

需要修改的配置文件位于nginxhttp server标签中,在server listen 8888(每个人端口可能不同) 标签下增加location/control 并设置为 rtmp_control all,这样就开启了控制器模块在http下的通道:

...server {listen       8888;server_name  localhost;location / {root   html;index  index.html index.htm;}location /mylive_hls {types {application/vnd.apple.mpegurl m3u8; # m3u8配置video/mp2t ts; # ts分片配置}alias /Users/xiaopeng/m3u8file; # 指向m3u8文件目录add_header Cache-Control no-cache; # 禁止缓存}# 开启控制器模块在http下的通道location /control {rtmp_control all;}error_page   500 502 503 504  /50x.html;
...
命令 功能描述
record 实现录制与停止直播流功能
drop 有选择地踢出推流用户或拉流用户
redirect 有选择地重定向推流用户或拉流用户

4.2.1 record命令

使用示例

如何实现直播业务中录制直播流的功能?

  • live.conf的配置参考

首先需要找一个地方存储录制的文件:这里我存放在/Users/xiaopeng/records

rtmp {server {listen 1935;application mylive {live on; # 开始直播hls on; # 开启hls直播hls_path /Users/xiaopeng/m3u8file; # 配置hls m3u8文件存放地址hls_fragment 2s;hls_playlist_length 16s;# 录制直播流相关配置recorder myRecord {record all manual;record_suffix _.flv;record_path /Users/xiaopeng/records;}}}
}
  • 推流
ffmpeg -stream_loop -1 -i finereportvideo.mp4  -c:v libx264 -c:a aac -f flv rtmp://192.168.199.208:1935/mylive/77
  • 开启录制url
curl "http://192.168.199.208:8888/control/record/start?app=mylive&name=77&rec=myRecord"

可以看到上述配置的录制文件夹下存在录制的视频flv格式文件:

  • 停止录制
    只需要将请求的url中的start替换成stop:
curl "http://192.168.199.208:8888/control/record/stop?app=mylive&name=77&rec=myRecord"

常用配置

配置项 说明 用法实例
rtmp_stat 数据流统计模块,可以通过url实时监控流媒体的各种状态
record 用来设定录制媒体选项命令
record_path 用于录制文件的输出路径
record_suffix 设置录制文件输出的文件名称
record_unique 将当前时间戳添加到已被记录的文件中 record_unique on
record_append 用于将新数据追加到旧文件中,或者当已录制的文件丢失时创建它,注意它和unique,suffix配置有冲突 record_append on
record_max_size 最大录制文件的大小 record_max_size 5000KB

4.2.2 drop命令

4.2.3 redirect命令

更加详细的官方指令文档参考: https://github.com/arut/nginx-rtmp-module/wiki/Directives
视频的基础知识参考: https://zhuanlan.zhihu.com/p/61747783

基于nginx-rtmp-module搭建直播系统相关推荐

  1. 基于SRS+OBS搭建直播系统

    这段时间与视频,直播相关的技术不可谓不热,今天我们就近距离接触下,尽早搭上这班车! 我们先看一张效果图 左边是OBS 推流端,右边是VLC播放器,稍微有延迟! 本文是基于VMware(12.5.7)+ ...

  2. Nginx Rtmp Module - HLS切片和级联播放

    #Nginx Rtmp Module - HLS切片和播放 1.名词解释 媒体片段文件(.ts): 媒体片段是由源站生成的,基于编码后的媒体源,并且是由一系列的 .ts 格式的文件组成,其中包含了你想 ...

  3. Ubuntu中使用Nginx+rtmp模块搭建流媒体视频点播服务

    1. 背景 不知不觉来到流媒体部门已经一年半多了,也算积攒了不少的流媒体知识,平时工作比较忙,到没有对流媒体技术进行系统性的梳理:最近刚完成一个Git实用指南的技术专栏,放松一周之后,觉得还是得让自己 ...

  4. 云服务器+开发板搭建直播系统,自建流媒体服务器开直播

    使用背景 你工作中有没有碰到过这种情况: 1,实验室里跑着实验要一直盯着,周围还有很多事情要做. 2,晚上跑着实验下班了,回到家还想时不时的看一下实验情况. 现在很流行的直播可以帮上忙,把实验台当作直 ...

  5. nginx RTMP FFmpeg 视频直播

    /***************************************************************************** nginx RTMP FFmpeg 视频直 ...

  6. ​基于Kubernetes 1.22搭建基准测试系统(train-ticket)手册​

    基于Kubernetes 1.22搭建基准测试系统(train-ticket)手册 本手册需要在搭建好kubernetes的基础上,再去运行基准测试系统.由于基准测试系统会占用大量的资源,所以要再真实 ...

  7. 搭建直播系统,从拥有一个专属域名开始

    如何轻松搭建直播系统? 只需简单5步 注册域名 建立自己的直播品牌,从注册域名开始 开通直播服务 登录腾讯云,进入直播产品页开通服务 CNAME自有域名 添加已经完成域名备案的推流域名和播放域名 直播 ...

  8. 基于VMware从零搭建Linux系统

    基于VMware从零搭建Linux系统 1.安装VMware和CentOS VMware官网 官方地址:https://www.vmware.com/cn.html 其地址:https://www.n ...

  9. python搭建流媒体服务器_Linux自建直播服务器一:使用Nginx+rtmp模块搭建流媒体服务器...

    技术服务于生活.当在日常遇到问题的时候,需要经常去思考如何解决这个问题. 最近网易的逆水寒开测了,非常荣幸拿到一个资格号,可以来体验一下这款国产巅峰级网游,一个会呼吸的江湖.作为一个极度业余的主播(一 ...

最新文章

  1. Sublime text3!行首,行尾,批量编辑!
  2. linux命令dd创建虚拟硬盘,每日一题.PYTHON如何模拟LINUX的dd命令快速创建大文件?...
  3. Invoke-Express 执行多个批处理命令的函数
  4. Spring 提供几种配置方式来设置元数据?
  5. dockerfile构建nginx并结合php
  6. Hadoop之深入HDFS原理<一>
  7. 一起谈.NET技术,Linq学习笔记
  8. Springboot个人博客搭建(附源码)
  9. android reset方法,Android factory reset 流程
  10. bzoj3332: 旧试题
  11. 笔记暂记15:陪集,商集
  12. HC-SR04超声波模块测距原理与原理图
  13. python爬微博步骤手机_新浪微博爬取笔记(2):wap端模拟登陆 python
  14. Python:求列表的最大数以及下标
  15. telnet控制路由器交换机与微信公众平台
  16. 最强代码阅读器sourceInsight工具
  17. 什么是数字签名?(内含漫画图解)
  18. Gurobi--Error code: 10005. Unable to retrieve attribute solved ‘Pi‘ 解决
  19. Windows10 LTSC 64位企业版
  20. smm mysql自增_SMM框架详解

热门文章

  1. [SPC]生产统计过程控制二
  2. .NET Word 文件格式转换
  3. matlab最小字典序,12小球称重问题 完美解决方案(转自 skywind.name)
  4. 关于网络编程socket的listen底层的一点理解
  5. AUTOSAR CAN Dirver模块说明及ETAS ISOLAR A/B配置(1)--概述和功能描述
  6. 信用卡商户mcc代码
  7. 基于java的智能化停车系统ER图_终稿毕业设计基于jvw日语停车管理系统毕业设计论文.docOK版(样例3)...
  8. 可爱的头像【 InsCode Stable Diffusion 美图活动一期】
  9. Apache访问html,Apache的应用三-- 通过HTTP访问本地用户目录
  10. 2020年全国职业院校技能大赛改革试点赛(中职组)