前言
再小的技术点也会有他的市场! 一直以来,都有一些不被看好,认为是成本太高,无法大规模展开的软件和产品形态,就好比每一座城市都会有他的著名小吃一样,即使是慕名而来的人源源不断,受众群体也总是有限,但这并不妨碍这些小而美的美食服务于一方用户;
在萤石/乐橙/微吼/趣看类型直播应用大规模开展的今天,高大上的直播形态视乎占据了主流,然而这些对于普通型的公司似乎成本有点高,而且不能够长线、无忧地进行,我所谓的无忧地进行,指的不是直播系统的稳定性,而是成本的稳定性,试着对比一种一直在被流量消耗扣钱的心态和每天乐此不疲地用花生壳动态域名解析进行直播的心态,完全是不一样的赶脚;
通过开源、开源社区,我们接触了大大小小各行各业的直播需求形态,大多数用户选择了最省钱的一种方式:用自有的IPC摄像机做为视频源,用企业自己的固定线路进行长时间不间断的常态直播,省钱啊!
上面说到何种需求形态,尤其是在较大企业需要,如:石油、航天、安监、农业,他们有一个共同点,前期投入了大量的经费构建自己的专用网络,有固定IP,带宽上下行足够大,流量不用也是浪费,基于自身安全保密考虑,需要在自建的网络中建设直播方案;
要义:我有带宽,我有服务器,我有固定IP,我有摄像头,我就想做自己的直播,不想用CDN!
技术实现方法
剥离业务需求,流媒体方面的业务需求基本就是:
- RTSP流转RTMP流进行RTMP/HLS直播; 此部分是功能的核心,如何能够稳定、支持重连、低延时、时间戳均匀地进行RTMP、HLS直播,ffmpeg是开发者的首选,能够兼容绝大部分的RTSP流和高效的RTMP推流,而且能够保持低延时,如果仅仅是用来做一个demo,那么用ffmpeg的命令就能搞定,通过:ffmpeg -re -i rtsp://xxx -f flv rtmp://xxx,这种命令形式,推送效果很好,但是有一个缺点,就是ffmpeg.exe目前不带自动断线重连的功能,所以,ffmpeg.exe只能做为demo来用; 另一种方式就是基于ffmpeg或者EasyRTSPClient+EasyRTMP的二次开发功能,自己开发出支持重连的RTSP拉转RTMP推的功能,这个方案我们在博客《EasyRTMP实现将RTSP流转换成RTMP流实现RTSP直播转RTMP直播的功能》和《EasyRTMP+EasyRTSPClient实现的多路(支持断线重连)RTSP转RTMP直播推流工具》中已经详细描述,ffmpeg来做的话,也将会是同样的方法,对每一路的“RTSP转RTMP”维护一个Session,每一个Session有一个ffmpeg拉流的RTSPSource和一个RTMP推流的RTMPSink,ffmpeg再维护RTSPSource的重连和RTMPSink的重连;
- 外围对这些RTSP输入源与RTMP输出源进行通道化的管理; 按照1中的描述,我们不但要做“RTSP转RTMP”的功能,还要做一个外围的有效的Source和Sink从配置、到修改、启用/禁用、列表查询等一系列的功能,这个功能其实就是类似NVR的通道管理的概念,而且通道管理还需要增加一些增值化的服务就更好了,比如:在线状态、通道快照、是否启用音频、是否长时间拉流推流/还是有人看的时候再拉转推,等等一系列的功能;
方案推荐
上面描述了这种业务需求的要义和解决方案,为自家开源团队开发的产品打个广告:EasyNVR,这个在之前的博客中也已经详细描述过一些应用的场景了《基于EasyNVR实现RTSP/Onvif监控摄像头Web无插件化直播监控》,EasyNVR在这一块已经经过了很多用户和应用场景的论证,对一般的企业级直播需求是完全能够满足的,而且还能对接到CDN,可以说是一款足够“小而美”的应用产品!
EasyNVR适用于各种网络场景中
EasyNVR适用的案例
基于EasyNVR实现了很多行业场景的直播需求,目前已经广泛应用于石油油田、水利大坝、园区监控、幼儿园直播、景区直播:
上为一水利监控项目应用,EasyNVR服务器一边拥有内网访问权限,一边拥有公网固定IP,采用的是方案1x
上为一施工工地网页监控项目,采用的EasyNVR方案为1x
上为一幼儿园直播监控项目,面向家长进行幼儿园微信直播,采用的EasyNVR方案为1x
上为一园区监控网页监控项目,采用的EasyNVR方案为1x
上为一施工工地网页监控项目,采用的EasyNVR方案为1x
上为中石油地点网页监控项目,采用的EasyNVR方案为2x