基于nginx-http-flv-module提供摄像头hls flv实时流服务

方案说明

大约是在去年的这个时候,我司需要一个流服务能对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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值