基于nginx-http-flv-module提供摄像头hls flv实时流服务_java摄像头通过nginx-http-flv实时预览如何在没有用户观看的时候关闭流-程序员宅基地

技术标签: 安防  nginx  http  

方案说明

大约是在去年的这个时候,我司需要一个流服务能对web提供视频流,在网上找来找去找到了nginx-http-flv-module,于是在这基础之上改了一个版本出来适配我们自己的系统。写完了,然后很久没有看这点代码了,今天有些问题翻出来看看,发现看不懂了 ,这里记录一下备忘。

首先从nvrserver上收到摄像头的流,然后将流送入rtmpservice模块,在模块里通过librtmp库推流到

nginx-http-flv-module里

因为摄像头比较多,这里我们需要实现按需推流,当客户端请求一个摄像头的流时才开启推流,没有用户请求这个摄像头时就关闭推流。

因此需要在nginx上做一些适配来实现这一需求。

这里我们分hls和flv来分别说明。

hls

开流

对于hls流,根据hls的原理,会不断的来取m3u8,ts文件,这里我们写了一个http module在nginx里来处理一下hls的取流请求,如果是hls取请求会先到我们这个模块里。这模块会upstream到nvrserver通知nvrserver开启对应摄像头的取流,同时暂停nginx对http请求的处理,nvrserver把摄像头的流通过rtmpservice模块通过rtmp协议推送流到nginx-http-flv-module,这个模块会不断的产生m3u8,ts文件给hls取流用。rtmpservice模块同时检测对应目录下是否有m3u8w文件生成,如果有就返回信息到upstream,我们的http module模块收到这个返回就把处理权交出来,交给nginx,这时因为已经有了m3u8文件,就返回给客户端这个文件,客户端就可以根据这个文件取到流了

停流

那nvrserver如何停止推流呢,我们在自己的http module模块里有一个定时器来检测是不是一直有在取m3u8文件。如果没有了就发送停推通知到nvrserver给他说可以停掉流了。

flv

开流

flv不像hls会不断的来取m3u8,ts文件,他始终都是1个连接。开启推流和hls一样,当有流请求就通知到nvrserver里开启推流

停流就和hls大不一样了,他不能通过是否有人在取文件实现。好在nginx-http-flv-module给我们提供了一个统计模块和通知模块,我们可以利用这两个模块实现停流通知。

停流

简单来将就是统计到没有人在playing这个流时就产生一个通知到我们的http module,http module在通知到nvrserver。

这个是nginx-http-flv-module模块的作者,感谢他开源了这个模块
https://blog.csdn.net/winshining

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wwyyxx26/article/details/116065342

智能推荐

在Windows上一键编译各种版本的Protobuf-程序员宅基地

文章浏览阅读6次。所需工具 : cmake for windows 和 git for windows原理:protobuf 是google的一个开源项目,其源代码在github上可以下载到,并且源码都采用cmake来构建,所以我们可以把源码下载到本地,然后了利用cmake构建本地工程,然后编译.步骤一:下载源码  复制以下代码,保存到download_protobuf_source.bat 文件中...

Unity热更新笔记(三)Addressable+ILRuntime 实现代码热更_unity dll 和 addresable 一起使用-程序员宅基地

文章浏览阅读1.6k次,点赞2次,收藏13次。系列文章目录(一)ILRuntime基础使用(二)Addressable基础使用目录系列文章目录简介流程DLL 转换代码DLL 加载代码简介把热更项目的 DLL 作为 addressable 的资源来实现热更新流程资源部分(1)addressable 是不支持 dll 的,所以需要把 dll 文件加工成 addressable 支持的格式(2)直接 File.ReadAllBytes 读取成 bytes 然后 File.WriteAllBytes 保存(3)保存文件的后缀为 .b_unity dll 和 addresable 一起使用

g2o optimize_如何在WordPress中添加Google Optimize(2种简单方法)-程序员宅基地

文章浏览阅读154次。g2o optimizeAre you looking to add Google Optimize on your WordPress site? 您是否要在WordPress网站上添加Google Optimize? Google Optimize is a free tool by Google that helps website owners optimize their site..._google optimize

Java面试总结,mybatis源码面试题-程序员宅基地

文章浏览阅读936次,点赞18次,收藏15次。OSI七层模型都是什么举例网络协议,都在哪个层TCP UDP区别TCP如何实现可靠连接Time_Wait中2*msl 为什么如果TCP突然接收方故障 会发生什么HTTP状态码 含义,503 504,200GET POST区别一个url从输入到访问经过了哪些过程说一说TCP三次握手和四次挥手。

Qt4.6 QMessageBox 使用大全_qmessagebox使用-程序员宅基地

文章浏览阅读2.1k次。使用方式为/***消息框的使用 *********************///提示框//QMessageBox::about(this,"about me","helloworld");// QMessageBox::aboutQt(this,"about me"); //输出关于Qt的详细信息//警告窗口//int bs= QMessageBox::critica_qmessagebox使用

互联网的下半场:社交媒体与消费场景革命_社交媒体推动消费场景潮流化-程序员宅基地

文章浏览阅读740次。作者:幻梦邪魂全文共 3450 字,阅读需要 7 分钟———— / BEGIN / ————亚里士多德说:人们为了生存来到了城市,为了生活的更好,留在了城市。那么,亚里士多德的“城市”又是什么?它就是一种更高效的、现代化的,分工协作的人类“消费场景”。随着人类文明的发展以及科学技术的进步,人们已经基本完成了从生理、安全需求到社会、尊重需求的过度,并在不断的尝试自我超越——尤其是在互联网出现后,短短_社交媒体推动消费场景潮流化

随便推点

boost intrusive_ptr指针_返回boost::intrusive_ptr的空指针-程序员宅基地

文章浏览阅读829次。intrusive_ptr直接进入正题吧在boost库中经常会用到shared_ptr这个智能指针,在正常情况下如下:A *p = new A();boost::shared_ptr(A) pa(p);boost::shared_ptr(A) pa0(pa);这样使用是毫无问题的,但是如果是这样使用如下:A *p = new A();boost::sha_返回boost::intrusive_ptr的空指针

bootstrap selectpicker 通过代码指定选中值_selectpicker设置选中值-程序员宅基地

文章浏览阅读2.1w次,点赞3次,收藏3次。$('#subjectno').selectpicker('val',(row.subjectno));row.subjectno替换成你要指定的值,当然前提必须要在select已有的数据中_selectpicker设置选中值

【亲测已解决】CentOS7 ifconfig commend not fount(命令找不到)_dhclient: command not found-程序员宅基地

文章浏览阅读225次。1、输入命令dhclient,可以自动获取一个IP地址,再用命令ip -a addr查看IP2、然后输入 yum search ifconfig查找符合这个命令的组件,查找到net-tools.x86_64,安装这个组件3、4、接下来安装组件yum installnet-tools.x86_645、安装成功后ifconfig,查看ip地址相关信息..._dhclient: command not found

纪念自己发布第一篇博客_如果你被所报考的单位聘用,单发表3分钟的感答案-程序员宅基地

文章浏览阅读189次。第一次写博客,一时间不知从何入手,从事软件工作已几年时间,各式各样的技术都只知皮毛,默然回首,自己丢弃的太多。今年突然醒悟,原来不管你愿不愿意承认,你就是一名技术人员,一个货真价实的码农,就算走向管理岗,也不论未来怎样发展,你的过去就是你的现在,我是一名java开发人员,一名技术人员,我的工作最开始的时候就是一个字母一个字母的编写出来的,我的路也是一行一行代码敲不来的。所以人不能忘本,应该脚踏实地,踏踏实实的,正视自己的不足,接受自己的缺陷,活得光明磊落,潇潇洒洒,不涂人间富贵,但求问心无愧。._如果你被所报考的单位聘用,单发表3分钟的感答案

使用多线程实现多个文件同步复制功能,并在控制台显示复制的进度,进度以百分比表示_使用多线程实现多个文件同步复制功能,并在控制台显示复制的进度,进度以百分比表示-程序员宅基地

文章浏览阅读2.7k次,点赞6次,收藏25次。题目:使用多线程实现多个文件同步复制功能,并在控制台显示复制的进度,进度以百分比表示。例如:把文件A复制到E盘某文件夹下,在控制台上显示“XXX文件已复制10%”,“XXX文件已复制20%”……“XXX文件已复制100%”,“XXX复制完成!”代码如下:1、Runnable接口方式package com.day505.testdemo.exam;import java.io.*;imp..._使用多线程实现多个文件同步复制功能,并在控制台显示复制的进度,进度以百分比表示

【TA100】Bloom算法_unity bloom-程序员宅基地

文章浏览阅读492次。● Bloom,也称辉光,是一种常见的屏幕效果● 模拟摄像机的一种图像效果,让画面中较亮的区域“扩散”到周围的区域中,造成一种朦胧的效果● 可以让物体具有真实的明亮效果● 可以实现光晕效果。_unity bloom

推荐文章

热门文章

相关标签