5G快来了,视频将会是跑在网络上流量最多的东西,短视频、长视频、电影、视频通话、视频监控,各类各样的,而在消费级领域,监控视频近些年也愈来愈受到关注和欢迎,从萤石摄像机的诞生、到一众互联网家用摄像机的兴起,人们对于视频的渴求已经远远超过纸媒、超过文字了,平常生活也从原来的文字消息、文字阅读,变成了发个语音、看个短视频;前端
发展衍变到安防流媒体,传统的视频安防模式,已经不适合了,安防+互联网已经不只仅是说能知足需求而已,而是已经占据了用户的使用习惯,不论是普通企业安防、仍是公安领域、或者是安防互联网相交地带,人们已经很难接受那种在公司外感觉互联网,在工做工具上回到原始时代,尤为是难以接受IE、C/S客户端、插件等等。nginx
咱们在传统安防互联网上,遇到了不少的需求:
问题:因为传统安防的设备,基本都是支持一个通用的RTSP协议的,有没有flash播放RTSP的播放器?H5能不能支持RTSP播放?
答案:没见过,之后估计也不会有;git
问题:能够本身作浏览器插件播放RTSP吗?
答案:能够的,chrome作ppapi插件,IE用ocx插件;github
可是,兼容性太差了,开发成本太高。在PC web兼容性上面,目前最好的方案是flash或者H5,可是H5在IE比较低版本上面会存在不支持的问题,仍是须要前端兼容切换成flash模式;在手机 web/微信兼容上面,毫无疑问,H5是惟一选择;web
那么问题来了,如何可以实现需求中的两点:chrome
- PC上输出兼容性较强的flash须要的rtmp或者hls流或者http-flv流;
- 手机上输出H5标准的HLS(m3u8+ts)流;
其实目前市面上大部分的CDN方案已经提示了咱们如何解决上述的问题了,那就是采用rtmp推流到rtmp流媒体服务器,同步输出:rtmp/hls/http-flv多种码流,再经过前端的兼容适配,就能完美地达到想要的方案,总结来讲,须要经过几个步骤:api
- RTSP拉流;
- 音视频转码(H.264 + AAC);
- RTMP推流;
- RTMP流媒体服务器;
- 前端兼容取流播放;
目前市面上能很是兼容地拉取各个厂家的RTSP流的方案总结来讲有两种:浏览器
- live555
- ffmpeg前端框架
两种都能比较不错地请求获取到各个厂家的摄像机码流,但从可操做的灵活角度上来讲,live555更胜一筹,好比:咱们遇到雄迈的某款摄像机须要在RTSP拉流的过程当中,向摄像机按期发送OPTIONS保活报文,而咱们遇到的某款海康的NVR在RTP over tcp取流的过程当中,一旦发送RTSP的任何报文,就会出现服务器端主动reset,种种此类,若是基于ffmpeg的拉流确实是能够兼容大部分的摄像机IPC、NVR,可是遇到特殊种类的就比较难进行改造和兼容了;服务器
没有绝对,根据需求,也许您就只须要接入某两款特定类型的摄像机呢,怎么适合现场需求怎么来;
因为目前RTMP、HLS的协议标准,包括前端的支持上,还停留在H.264+AAC的组合上,因此,咱们须要将各类视频格式:H.26五、MJPEG、MPEG4,各类音频格式:G.711A/U、G.726,都统一转码成H.264和AAC,说到转码,那确定是ffmpeg first;
目前市面上的大部分摄像机都是默认或者设定为输出H.264视频流,但音频流转码就确定是须要兼容的,目前来讲安防标准中大部分的音频格式都仍是G.711和G.726居多,那就能够用faac、EasyAACEncoder(Based on faac)进行音频转码了!
RTMP推流毋庸置疑,目前最流行的仍是librtmp了,固然直接用ffmpeg也直接集成了rtmp推流的功能,并且在时间戳调优方面,帮助咱们省了不少事情;
关于时间戳调优上,咱们在开发EasyRTMP上花费了不少时间,因为各个IPC厂家出来的时间戳不必定是很是标准的(这里就要赞一下海康,批评一下雄迈了,请问雄迈的开发,大家搞出来的时间戳都是什么玩意儿?),因此就须要RTMP推流端对时间戳进行一次均匀化,否则就会出现HLS常常会快放、慢放、卡顿缓冲加载的现象,这一点上EasyRTMP参考的ffmpeg的-re命令的方案,对时间戳进行了优化,保证均匀播放;
这里说到的RTMP服务器有几个输出条件:
- rtmp
- hls
- http-flv(可选)
这种类型的开源流媒体服务器目前能够推荐的有国产的srs、著名的nginx-rtmp、固然还有咱们开发的商业化的EasyDSS(EasyDSS是EasyDarwin团队开发的一款商用流媒体服务器,详情见:www.easydss.com),除了nginx-rtmp不能输出http-flv功能(固然也不会影响总体需求的实现),都能很是好地知足用户的需求;
前端兼容固然就是一套很是闪亮并且先进的前端框架,能响应式地接受各类不一样平台终端的请求,为PC web、手机 web、微信分配从rtmp流媒体服务器获取rtmp、hls、http-flv等直播流;
推荐EasyNVR用到的EasyUI框架:
说了这么多,固然要推荐推荐本身团队开发的EasyNVR了,以上的干货都是在开发EasyNVR的过程当中积累的;
EasyNVR可以经过简单的网络摄像机通道配置,将传统监控行业里面的高清网络摄像机IP Camera、NVR等具备RTSP协议输出的设备接入到EasyNVR,EasyNVR可以将这些视频源的音视频数据进行拉取,转换为RTMP/HLS,进行全平台终端H5直播(Web、Android、iOS),而且EasyNVR可以将视频源的直播数据对接到第三方CDN网络,实现互联网级别的直播分发;