大约是在去年的这个时候,我司需要一个流服务能对web提供视频流,在网上找来找去找到了nginx-http-flv-module,于是在这基础之上改了一个版本出来适配我们自己的系统。写完了,然后很久没有看这点代码了,今天有些问题翻出来看看,发现看不懂了 ,这里记录一下备忘。
首先从nvrserver上收到摄像头的流,然后将流送入rtmpservice模块,在模块里通过librtmp库推流到
nginx-http-flv-module里
因为摄像头比较多,这里我们需要实现按需推流,当客户端请求一个摄像头的流时才开启推流,没有用户请求这个摄像头时就关闭推流。
因此需要在nginx上做一些适配来实现这一需求。
这里我们分hls和flv来分别说明。
开流
对于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不像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
文章浏览阅读2.4k次,点赞3次,收藏9次。在写qt网口通信的过程中,遇到中文就乱码。解决方法如下:1.接收端处理中文乱码代码如下 QByteArray-> QString 中文乱码解决: #include <QTextCodec>QByteArray data= tcpSocket->readAll(); QTextCodec *tc = QTextCodec::codecForName("GBK"); QString str = tc->toUnicode(data);//str如果是中文则是中文字符_qbytearray中文乱码
文章浏览阅读2.5k次,点赞2次,收藏15次。什么是 DOM?文档对象模型(Document Object Model,简称 DOM),是 W3C 组织推荐的处理可扩展标记语言(HTML或者XML)的标准编程接口。W3C 已经定义了一系列的 DOM 接口,通过这些 DOM 接口可以改变网页的内容、结构和样式DOM 树文档:一个页面就是一个文档,DOM 中使用 document 表示元素:页面中的所有标签都是元素,DOM 中使用 element 表示节点:网页中的所有内容都是节点(标签、属性、文本、注释等),DOM 中使用 node._元素事件
文章浏览阅读1.4k次,点赞3次,收藏7次。关于服务的一些基本知识,包括活动对接口的方法调用,接口实现,服务生命周期等知识。_安卓服务
文章浏览阅读7.9k次,点赞5次,收藏8次。小白式数据库连接池使用,看完拿捏数据库连接池。_采用连接池方式连接数据库
文章浏览阅读4.9k次,点赞5次,收藏36次。摘要:本文介绍了C++11中如何开启新线程,并详细讲解了线程的基础同步原语:mutex, lock_guard, unique_lock, condition variable和semaphore等。如何采用async, packaged_task和promise实现future同步机制?怎样处理spurious wakeup?本文以质数判定服务为例为大家分享C++多线程同步措施!1. C++线程和基础同步原语Thread mutex, lock_guard, unique_lock con._c++线程同步
文章浏览阅读3.3k次,点赞4次,收藏9次。STM32 GPIOx通用输入输出I/O端口的BSRR寄存器与BRR功能简述_gpiob->brr
文章浏览阅读590次。IMP-00019: row rejected due to ORACLE error 12899IMP-00003: ORACLE error 12899 encounteredORA-12899: value too large for column "CRM"."BK_ECS_ORDER_INFO_00413"."POSTSCRIPT" (actual: 895, maximum..._row rejected due to oracle
文章浏览阅读918次。目前很多Web的项目在部署的时候会采用Nginx做为前端的反向代理服务器,后端会部署很多业务处理服务器,通常情况下Nginx代理服务器部署的还是比较少,而且其以高效性能著称,几万的并发连接处理速度都不在话下。然而去年的时候,我们的线上系统也采用类似的部署结构,同时由于我们的业务需求,Nginx的部署环境在虚拟机上面,复用了其他虚拟机的整体磁盘,在高IO消耗的场景中,我们发现Nginx的磁盘_nginx tcp转发 硬盘io
文章浏览阅读645次。Activiti 开发环境的搭建非常简单,主要分为 Activiti runtime 的安装以及 Eclipse 开发环境的配置。本文以 Windows 平台为例介绍 Activiti 5.8 版的开发环境的搭建配置过程。Activiti 的运行时程序可以从http://www.activiti.org/download.html 下载,目前最新版本为 5.8。为了配置使用 Activ_antdev activity
文章浏览阅读2.3k次。1. Vuex 是什么?Vuex 是专门为Vue 组件化思想带来的组件间通信问题提供的解决方案,主要解决以下两个问题:多个视图依赖于同一状态 来自不同视图的行为需要变更同一状态2. 核心概念State: 可以简单理解为Vue 维持的全局变量(状态)。 Getter: 获取State 中的状态的方法,可以在取出前对数据进行二次处理。 Mutation: 是改变State 中的状态..._vuex的组件同级通信
文章浏览阅读8.4k次,点赞31次,收藏33次。逆向中常常出现一些加密算法,如果我们能对这些加密算法进行快速识别则会大大减少我们逆向的难度,虽然IDA已有密码分析神器Findcrypt,但掌握手动分析方法能帮助我们应对更多的情况。这篇文章将介绍逆向中常见的单项散列算法和对称加密算法的识别方法。0xFF. 前言在很长一段时间里我经常发现自己面对复杂的加密算法无从下手,可能是因为还没有系统学过密码学吧orz,总之这个问题困扰了我很久。于是最近我花了一些时间来解决自己在密码学这块的薄弱点,写下这篇文章的目的之一也是为了巩固所学知识。加密算法的部分没有_findcrypt3 支持哪些算法
文章浏览阅读5.3k次。smplayerThere are lots of video players out there, but one that we think gets overlooked is SMPlayer. It can do anything other video players can do and even more – like remembering where you left off ..._sm69影视