nginx-http-flv-module的功能

兼容nginx-rtmp-module所有功能

支持HTTP-FLV/HTTPS-FLV方式的直播

支持GOP缓存,以减少首屏时间

支持虚拟主机功能

可以省略listen配置项而不影响基本功能

修复nginx-rtmp-module已知的bug

第一:以动态模块的方式编译安装nginx(基于centos7)

#安装必要组件

yum install gcc pcre-devel openssl-devel zlib git -y

如果NGINX要支持正则表达式,需要PCRE库。

如果NGINX要支持加密访问,需要OpenSSL库。

如果NGINX要支持压缩,需要zlib库。

#下载,解压,重命名nginx和nginx-http-flv-module模块)(这是项目地址:https://github.com/winshining/nginx-http-flv-module)

wget http://nginx.org/download/nginx-1.16.1.tar.gz

#注意当前版本有一个bug,就是当你在推流时,服务端reload nginx 后进程会"worker process is shutting down"

git clone https://github.com/winshining/nginx-http-flv-module.git

#加载nginx-http-flv-module 模块编译安装nginx

mkdir /app/nginx -p

cd /root/nginx

#nginx-http-flv-module包含了nginx-rtmp-module所有的功能,所以不要将nginx-http-flv-module和nginx-rtmp-module一起编译。

./configure --prefix=/app/nginx --add-dynamic-module=/root/nginx-http-flv-module

#./configure --prefix=/app/nginx --add-dynamic-module=/root/nginx-http-flv-module --with-http-per-worker-listener --with-debug

#--with-http-per-worker-listener 需要先为nginx打上补丁,抱歉能力有限,没打上

make

make install

#删除多余默认的nginx配置文件

rm -f /app/nginx/conf/nginx.conf.default

#把自带的xml格式的统计文件,移动到nginx目录下

cp /root/nginx-http-flv-module/stat.xsl /app/nginx/html/

配置nginx的全局模块,后期需要用到的模块功能。全部以配置文件的形式在全局模块中进行引用

cat /app/nginx/conf/nginx.conf

user nginx;

worker_processes 1;

#在events前面添加http-flv动态模块

load_module /app/nginx/modules/ngx_http_flv_live_module.so;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

include /app/nginx/conf/stat.conf;

include /app/nginx/conf/LL-http.conf;

}

include /app/nginx/conf/TL-rtmp.conf; #注意这配置的是rtmp直播推流,他不在http模块里面,而是放在http模块外面

配置nginx的相关统计界面展示

cat /app/nginx/conf/stat.conf

server {

listen 8081;

location /stat {

#push和pull状态的配置

#rtmp_stat_format json; #默认是格式,这里可以指定为json格式。

rtmp_stat all;

rtmp_stat_stylesheet stat.xsl;

}

location /stat.xsl {

root /app/nginx/html; #指定stat.xsl的位置

}

#如果需要JSON风格的stat, 不用指定stat.xsl

#但是需要指定一个新的配置项rtmp_stat_format

location /control {

rtmp_control all; #rtmp控制模块的配置

}

}

#这是访问地址:http://192.168.60.33:8081/stat

#下面展示的是浏览器访问的效果页面

推流配置:配置rtmp直播推流模块,并配置录播功能,将流保存为flv的视频文件存在本地(其实也rtmp的拉流也就一起完成了配置)

#创建录播文件存储位置,并将目录的所属组改成nginx(这个很重要,不然数据无法写入)

mkdir /video/on-live/flv ; chown nginx /video/on-live -R

#下面是rtmp推流设置

cat /app/nginx/conf/TL-rtmp.conf

rtmp_auto_push on; #因为Nginx可能开启多个子进程,这个选项表示推流时,媒体流会发布到多个子进程

rtmp_auto_push_reconnect 1s;

#rtmp_socket_dir /video; #多个子进程情况下,推流时,最开始只有一个子进程在竞争中接收到数据,然后它再relay给其他子进程,他们之间通过 socket传输数据,这个选项表示unix domain socket的路径

rtmp {

out_queue 4096;

out_cork 8;

max_streams 128;

timeout 15s;

drop_idle_publisher 15s;

log_interval 30s; #log模块在access.log中记录日志的间隔时间,对调试非常有用

log_size 1m; #log模块用来记录日志的缓冲区大小

server {

listen 1935;

chunk_size 4096; #流多路复用的最大块大小。默认值为4096。此值越大,CPU开销越低。该值不能小于128。

application on-live {

live on; #开启直播直播模式,一对多广播

hls on;

gop_cache on; #开启解决首屏响应问题,加快响应

wait_key on; #对视频切片进行保护,开启后发现分片保存的数量多了,功能是使视频流重一个关键帧开始,默认为off

hls_path /video/on-live/hls; #hls切片视频文件存放位置,若是配置hls拉流的形式,拉流配置里面要写清楚这个路径

hls_fragment 5s; #默认是5秒。只能为整数,#每个视频切片的时长

hls_playlist_length 60s; ##总共可以回看的事件,这里设置的是1分钟

hls_continuous on; #连续模式

hls_cleanup on; #对多余的切片进行删除

#publish_notify on; #推流验证,和下一行需一起使用

#on_publish http://localhost/auth.php; #推流验证,具体可参照后文

#下面是录播配置

record all; #启用录制所有信息,包括视频和声音(有其他可选项,参考文档)

record_path /video/on-live/flv; #flv录制文件存放地址。注意该目录的所有者要是nginx,或者777权限

record_max_size 300M; #控制文件的大小,每个文件到了300m后,结合下面的参数新创建一个文件继续保存

record_unique on; #在文件名后加上unlix时间戳,防止重复写同一文件造成视频丢失(默认是关闭的)

}

}

}

#当我们这样配置后,我们的推流地址将会是:rtmp://192.168.60.33/on-live/

#当我们确定要推流时,流名字设置为(王者荣耀)wzry时,我们的推流地址是:rtmp://192.168.60.33/on-live/wzry

#同时,我们的rtmp播放地址将是:rtmp://192.168.60.33/on-live/wzry

拉流配置:配置http-flv方式 以及 hls方式 播放直播流

cat /app/nginx/conf/LL-http.conf

#http-flv方式

server {

listen 80;

location /live {

flv_live on; #打开HTTP播放FLV直播流功能

types {

application/vnd.apple.mpegurl m3u8;

video/mp2t ts;

}

chunked_transfer_encoding on; #支持'Transfer-Encoding: chunked'方式回复

add_header Cache-Control no-cache;

add_header Access-Control-Allow-Origin *;

}

}

#hls方式

server {

listen 8080;

location /hls {

# Serve HLS fragments

types {

application/vnd.apple.mpegurl m3u8;

#或者这样写 application/x-mpegURL

video/mp2t ts;

}

alias /video/on-live/hls/; #直播hls分片的路径,一定要写哦,很重要

chunked_transfer_encoding on; #支持'Transfer-Encoding: chunked'方式回复

add_header Cache-Control no-cache;

add_header Access-Control-Allow-Origin *;

}

}

==============分割线=============

#http-flv的播放方式及地址:(vlc)

#拉流url为 http://ip:port/[http拉流app名字]?port=[rtmp推流端口]&app=[rtmp推流app名字]&stream=[视频流名称]

http://192.168.60.33/live?port=1935&app=on-live&stream=wzry

如果要实现 HTML5 对http-flv的形式播放,可以使用 B 站开源的 flv.js,更多内容可以参照其文档,此处不做更多说明。

#hls的播放方式及地址

第一:先在nginx中的web目录创建播放页面文件,并且把hls的路径写进去(注意内容里src的写法)

cat /app/nginx/html/index.html

Your browser does not support HTML5 video.

第二:如何播放,直接用浏览器打开网址就可以 http://192.168.60.33/index.html

下面附图是主流浏览器对HLS的支持情况(移动端安卓和IOS的浏览器基本都支持的,window PC端支持力度不够,)

如果浏览器并不原生支持 hls,可使用第三方插件,例如 hls.js;或者使用 video.js 配合 videojs-contrib-hls,这也是不错的解决方案

配置点播:http&rtmp点播的配置与播放方式

#先确定视频文件的路径(把视频文件放到/video/vod/ 这个目录下即可)

[root@rtmp-http-mp4-flv video]# ls /video/vod/ -l

total 17052

-rw-r--r-- 1 root root 17458996 Mar 26 2019 1.mp4

#配置http的点播,直接在浏览器里面输入url路径即可播放(注意:这是在http模块中配置的)

server {

listen 8080;

location /dianbo {

alias /video/vod;

limit_rate_after 50m; #---------下载10m后再限速

limit_rate 5000k; #----------限速500k

}

}

#配置rtmp的点播,rtmp方式的点播很不友好建议不开,不能快进,快进就卡死(注意:这是在rtmp模块下配置的)

#server {

# listen 1935;

# chunk_size 4096;

# application dianbo {

# play /video/vod;

# }

#}

#http方式的点播放方式及地址(浏览器直接打开)

"http://192.168.60.33:8080/dianbo/1.mp4"

#rtmp方式的点播播放方式及地址(用vlc吧)

# "rtmp://192.168.60.33/dianbo/1.mp4"

配置:流中继,转播(由于rtmp的实时性,低延迟,这里只做了rtmp的转播配置)

注意:至少要有一个客户端连接,才会去拉取源流,我测试中,本地不会保存任何数据

rtmp {

server {

listen 1935;

chunk_size 4096;

application bkb-onlive {

live on;

gop_cache on; #开启解决首屏响应问题,加快响应

hls on;

pull rtmp://media3.scctv.net/live/scctv_800; #这是配置rtmp直播转播

#play /var/local_mirror http://myserver.com/vod; #点播转播

hls_path /video/bkb-onlive/hls;

#下面还可以开启边转播边录制

#record all;

#record_path /video/bkb-onlive/flv;

#record_max_size 100M;

#record_unique on;

}

}

}

#rtmp方式播放地址(注意最后面的流名字)

rtmp://192.168.60.33/bkb-onlive/scctv_800

#http-flv方式播放地址:(http-flv的拉流配置沿用:第四步:配置http-flv方式 以及 hls方式 播放直播流)

http://192.168.60.33/live?port=1935&app=bkb-onlive&stream=scctv_800

配置收流服务器:中转推流服务器,将client的直播流 推到 中转服务器,中转服务器再推送到各大网站上,并开启直播验证(类似输入房间号),待完善

#收流与转推配置

rtmp { #RTMP服务

server{

listen 1935; #服务端口

chunk_size 10240; #数据传输块的大小

application live {

live on;

record off;

on_publish http://YOUR_SERVERNAME:2080/auth;

push rtmp://live.twitch.tv/app/YOUR_LIVE_API; #RTMP直播地址1

push rtmp://a.rtmp.youtube.com/YOUR_LIVE_API; #RTMP直播地址2

}

}

}

#收流验证配置(类似房间号+密码)

http {

server {

listen 127.0.0.1:2080;

location /auth {

rewrite_by_lua '

ngx.req.read_body()

local name = ngx.req.get_post_args().name

if (name == "xxxxxxxxxx") then

ngx.status = 200

ngx.say("OK")

ngx.exit(200)

else

ngx.status = 403

ngx.say("Forbidden")

ngx.exit(403)

end

';

}

}

}

#测试 RTMP 服务器配置

curl -0 http://127.0.0.1:2080/auth -d "name=xxxYOUR_UUID"

#xxxYOUR_UUID 替换成前面生成的 UUID,应该输出 OK,再把 xxxYOUR_UUID 换成一个错误的,应该输出 Forbidden。

增加rtmp推送校验

正常的直播系统都是需要使用rtmp传送房间号和校验码,所以看上个代码里有一个on_pulish配置。我们需要做个代理进行key校验。

把这个key校验放到8080端口 进行判断。正常情况应该是把这个on_publish请求转发到 python、java、nodejs等后台服务读取数据库进行校验。

这里由于是搭建个人使用环境,就进行简单配置就行了。

http {

server {

listen 8080;

...

location /on_publish {

default_type text/html;

if ($arg_key != 123456) {

return 404;

}

return 200;

}

...

}

}

第二:为web播放MP4创建播放器

rm /app/nginx/html/index.html -rf

cd /app/nginx/html/

wget https://qiniu.wsfnk.com/index-play.html

mv index-play.html index.html

第四:各种客户端,推流,拉流地址(注意这样的直播推流,差不多存在两分钟的延迟)

http://13.16.37.9/hls/home.m3u8

rtmp://13.16.37.9/dianbo/1.mp4 #vlc客户端拉流地址

http://13.16.37.9:8081/2.mp4 #网页播放/vlc都可以,用http协议可以快进

#下图是推流地址

延迟对比

rtmp:在没开启gop_cache on; 首屏满的要死,开启后首屏秒开,整体延迟在5s左右

附nginx配置文件讲解及 公共的RTMP源

#公共源

1,RTMP协议直播源

美 国 台:rtmp://media3.scctv.net/live/scctv_800

淮北影视频道:rtmp://vod.0561rtv.com:1935/live/live4

2,RTSP协议直播源

3,HTTP协议直播源

CCTV1高清:http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8

CCTV3高清:http://ivi.bupt.edu.cn/hls/cctv3hd.m3u8

CCTV5高清:http://ivi.bupt.edu.cn/hls/cctv5hd.m3u8

CCTV5+高清:http://ivi.bupt.edu.cn/hls/cctv5phd.m3u8

CCTV6高清:http://ivi.bupt.edu.cn/hls/cctv6hd.m3u8

苹果提供的测试源:http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear2/prog_index.m3u8

ffmpeg的安装

sudo apt-add-repository ppa:jon-severinsson/ffmpeg

sudo apt-get update

sudo apt-get install ffmpeg

微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者

videojs重播_nginx搭建流媒体服务器,实现点播,直播,转播,录播(直播回放)功能(未完)...相关推荐

  1. java red5 点播_树莓派实用RED5搭建流媒体服务器实现点播功能

    1,搭建流媒体服务器一直是自己想玩的一个东西,在高中玩workerman框架时有人就做过nginx通过rtmp模块搭建流媒体服务器,nginx的特性就是高并发,轻量级,一般大型企业都会采用这个服务器, ...

  2. 搭建流媒体服务器,完成属于自己的直播服务

    搭建的原因 最近工作需要与异地工作的同事讨论问题,需求是能看到同事的画面和电脑桌面屏幕和还有声音.所以需要搭建一台流媒体服务器,现在很火的直播一般都是用RTSP和RTMP,做点播用HTTP.做视频会议 ...

  3. Nginx+ffmpeg 搭建流媒体服务器(四):H5直播演练

    H5直播演练 播放器选型 video.js hls.js flv.js 播放器选型 video.js 链接: GitHub https://unpkg.com/video.js/dist/video- ...

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

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

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

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

  6. 阿里云环境搭建流媒体服务器(自己写的文档)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.nginx-rtmp-module-master 二.使用步骤 1.我的ngix版本1.9.9 2.注意 前言 由 ...

  7. ffmpeg libx264_nginx+ffmpeg搭建流媒体服务器(直播流)

    这里实现了简单nginx+ffmpeg 推本地mp4视频文件的功能,以后将会继续更新 环境 系统环境:CentOS release 6.7 (Final) 需求 利用nginx和ffmpeg搭建流媒体 ...

  8. 苹果手机直播显示服务器,搭建流媒体服务器(iOS直播 )

    写在前面 开发一款直播app,肯定需要流媒体服务器,本篇主要讲解直播中流媒体服务器搭建,并且讲解了如何利用FFMPEG编码和推流,并且介绍了FFMPEG常见命令. 效果 一.安装Homebrew 首先 ...

  9. obs nginx-rtmp-module搭建流媒体服务器实现直播 ding

    欢迎大家来此浏览,希望大家一块在此学习,共同交流进步. 接下来我就简单跟大家介绍一下利用nginx来搭建流媒体服务器. 我选择的是腾讯云服务器 1.下载nginx-rtmp-module: nginx ...

最新文章

  1. 智源研究院多位学者入选“三大奖”!2020年度国家科学技术奖初评结果公布
  2. 防止网络请求(或其他回调)引用,从而造成内存泄漏
  3. Photoshop初涉---第一次系统地学习
  4. 【常用】截取相机图片截图功能
  5. 关于医学院网络中心成立工作室的设想
  6. Zabbix监控,详细部署
  7. 【JVM性能调优】jstack和线程dump分析
  8. jQuery 属性选择器
  9. python压缩文件为zip-python 压缩文件为zip后删除原文件
  10. JAVA jdk环境搭建
  11. Python数据分析:pandas玩转Excel(一)
  12. python 与或非_Python的阶乘求和
  13. “Alexa,喂我吃草莓”机器人女仆现身,会做饭还会喂食
  14. 16进制字符串转字节数组
  15. PEPS 无钥匙进入系统低频芯片 PCF7991 介绍
  16. 网页API分析之淘宝抢购秒杀原理(订单数据获取简单分析)
  17. 2012 IMF 全球人均gdp排名
  18. 收集广州周边徒步线路
  19. 新能源汽车整车控制器(VCU\HCU)
  20. project weibo

热门文章

  1. Codeigniter
  2. 多级别划分化学制品制造业经销商,经销商商城系统优化企业分销渠道链
  3. 强化学习 补充笔记(TD算法、Q学习算法、SARSA算法、多步TD目标、经验回放、高估问题、对决网络、噪声网络)
  4. QT zint一维码生成解析
  5. Django批量保存数据bulk_create方法
  6. python3-慕课网-七月课程
  7. maven安装jar包
  8. windows8 linux双系统,win7或win8、win8.1系统下安装ubuntu实现双系统图文教程
  9. Linux中head与tail命令
  10. 在此谨对我军美丽而又神勇的女程序员表示膜拜