zoukankan      html  css  js  c++  java
  • EasyNVR是如何做到无插件播放RTSP摄像机,完美将海康、大华、宇视等安防设备向互联网转化的

    5G快来了,视频将会是跑在网络上流量最多的东西,短视频、长视频、电影、视频通话、视频监控,各种各样的,而在消费级领域,监控视频近些年也越来越受到关注和欢迎,从萤石摄像机的诞生、到一众互联网家用摄像机的兴起,人们对于视频的渴求已经远远超过纸媒、超过文字了,日常生活也从原来的文字消息、文字阅读,变成了发个语音、看个短视频;

    发展衍变到安防流媒体,传统的视频安防模式,已经不适合了,安防+互联网已经不仅仅是说能满足需求而已,而是已经占据了用户的使用习惯,不管是普通企业安防、还是公安领域、或者是安防互联网相交地带,人们已经很难接受那种在公司外感受互联网,在工作工具上回到原始时代,尤其是难以接受IE、C/S客户端、插件等等。

    我们在传统安防互联网上,遇到了很多的需求:
    问题:由于传统安防的设备,基本都是支持一个通用的RTSP协议的,有没有flash播放RTSP的播放器?H5能不能支持RTSP播放?
    答案:没见过,以后估计也不会有;

    问题:可以自己做浏览器插件播放RTSP吗?
    答案:可以的,chrome做ppapi插件,IE用ocx插件;

    但是,兼容性太差了,开发成本过高。在PC web兼容性上面,目前最好的方案是flash或者H5,但是H5在IE比较低版本上面会存在不支持的问题,还是需要前端兼容切换成flash模式;在手机 web/微信兼容上面,毫无疑问,H5是唯一选择;

    方案

    那么问题来了,如何能够实现需求中的两点:

    • PC上输出兼容性较强的flash需要的rtmp或者hls流或者http-flv流;
    • 手机上输出H5标准的HLS(m3u8+ts)流;

    其实目前市面上大部分的CDN方案已经提示了我们如何解决上述的问题了,那就是采用rtmp推流到rtmp流媒体服务器,同步输出:rtmp/hls/http-flv多种码流,再通过前端的兼容适配,就能完美地达到想要的方案,总结来说,需要通过几个步骤:

    1. RTSP拉流;
    2. 音视频转码(H.264 + AAC);
    3. RTMP推流;
    4. RTMP流媒体服务器;
    5. 前端兼容取流播放;

    实现方法

    1. RTSP拉流

    目前市面上能非常兼容地拉取各个厂家的RTSP流的方案总结来说有两种:

    - live555
    - ffmpeg

    两种都能比较不错地请求获取到各个厂家的摄像机码流,但从可操作的灵活角度上来说,live555更胜一筹,比如:我们遇到雄迈的某款摄像机需要在RTSP拉流的过程中,向摄像机定期发送OPTIONS保活报文,而我们遇到的某款海康的NVR在RTP over tcp取流的过程中,一旦发送RTSP的任何报文,就会出现服务器端主动reset,种种此类,如果基于ffmpeg的拉流确实是可以兼容大部分的摄像机IPC、NVR,但是遇到特殊种类的就比较难进行改造和兼容了;

    没有绝对,根据需求,也许您就只需要接入某两款特定类型的摄像机呢,怎么适合现场需求怎么来;

    2. 音视频转码(H.264 + AAC)

    由于目前RTMP、HLS的协议标准,包括前端的支持上,还停留在H.264+AAC的组合上,所以,我们需要将各种视频格式:H.265、MJPEG、MPEG4,各种音频格式:G.711A/U、G.726,都统一转码成H.264和AAC,说到转码,那肯定是ffmpeg first;

    目前市面上的大部分摄像机都是默认或者设定为输出H.264视频流,但音频流转码就肯定是需要兼容的,目前来说安防标准中大部分的音频格式都还是G.711和G.726居多,那就可以用faac、EasyAACEncoder(Based on faac)进行音频转码了!

    3. RTMP推流

    RTMP推流毋庸置疑,目前最流行的还是librtmp了,当然直接用ffmpeg也直接集成了rtmp推流的功能,而且在时间戳调优方面,帮助我们省了很多事情;

    关于时间戳调优上,我们在开发EasyRTMP上花费了很多时间,由于各个IPC厂家出来的时间戳不一定是非常标准的(这里就要赞一下海康,批评一下雄迈了,请问雄迈的开发,你们搞出来的时间戳都是什么玩意儿?),所以就需要RTMP推流端对时间戳进行一次均匀化,不然就会出现HLS经常会快放、慢放、卡顿缓冲加载的现象,这一点上EasyRTMP参考的ffmpeg的-re命令的方案,对时间戳进行了优化,保证均匀播放;

    4. RTMP流媒体服务器

    这里说到的RTMP服务器有几个输出条件:

    - rtmp
    - hls
    - http-flv(可选)

    这种类型的开源流媒体服务器目前可以推荐的有国产的srs、著名的nginx-rtmp、当然还有我们开发的商业化的EasyDSS(EasyDSS是EasyDarwin团队开发的一款商用流媒体服务器,详情见:www.easydss.com),除了nginx-rtmp不能输出http-flv功能(当然也不会影响整体需求的实现),都能非常好地满足用户的需求;

    5. 前端兼容取流播放

    前端兼容当然就是一套非常闪亮而且先进的前端框架,能响应式地接受各种不同平台终端的请求,为PC web、手机 web、微信分配从rtmp流媒体服务器获取rtmp、hls、http-flv等直播流;

    推荐EasyNVR用到的EasyUI框架:

    EasyNVR

    推荐方案

    说了这么多,当然要推荐推荐自己团队开发的EasyNVR了,以上的干货都是在开发EasyNVR的过程中积累的;
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    EasyNVR

    关于EasyNVR

    EasyNVR能够通过简单的网络摄像机通道配置,将传统监控行业里面的高清网络摄像机IP Camera、NVR等具有RTSP协议输出的设备接入到EasyNVR,EasyNVR能够将这些视频源的音视频数据进行拉取,转换为RTMP/HLS,进行全平台终端H5直播(Web、Android、iOS),并且EasyNVR能够将视频源的直播数据对接到第三方CDN网络,实现互联网级别的直播分发;

  • 相关阅读:
    Android官方架构组件介绍之ViewModel
    Android官方架构组件介绍之LiveData
    Android官方架构组件介绍之LifeCycle
    Android N 通知概览及example
    Project和Task
    hello gradle
    写出gradle风格的groovy代码
    Groovy中的面向对象
    tcp_tw_recycle和tcp_timestamps的一些知识(转)
    Xtrabackup 热备
  • 原文地址:https://www.cnblogs.com/EasyNVR/p/10833965.html
Copyright © 2011-2022 走看看