海康大华等安防摄像机采用通用RTSP协议流转RTMP推送至Web无插件播放展示的流程方法

时间:2024-03-11 07:09:58

行业现状
中国互联网化的进程已经越来越快了,各个行业都在进行着互联网化的改造,流媒体、音视频,作为跑在互联网上最大量级的数据类型,其从编码方式到传输协议到终端兼容都成为各家标准抢占的高点,RTMP、HLS(m3u8)、WEBRTC、AV1等等,互联网带来的使用习惯已经冲击了非常非常多的传统行业,就包括非常稳重的电力行业、高速交通行业,都逐步在往互联网、物联网架构进行靠拢,视频技术在这些行业也逐步开始发生变化,视频数据作为大数据可视化的重要部分,一定是要出现在可视化系统中的。

在传统流媒体视频监控行业、以视频为核心的物联网行业、以视频为特色的各行各业,都在一方面想进行老设备的互联网化改造,另一方面想在新设备的接入时都能够以传统安防的成本和互联网的架构方式来构建新的视频、流媒体、安防系统;

其实以上两种诉求是不矛盾的,大概自2010年前后,几乎所有的安防摄像机都已经开始支持RTSP协议了,即使是网络摄像机IPCamera、网络硬盘录像机NVR之前的模拟摄像机、硬盘录像机DVR,也都逐步可以通过“IPC接入NVR”、“DVR固件升级”的方式,将非标的设备都转换成为支持标准RTSP/RTP协议的网络设备。以海康摄像机为例,海康的数字、模拟、IPC、DVR、NVR都可以向上进行兼容接入,也就是再老的设备,都可以通过向下兼容的方式,由最新的设备将老设备进行接入并标准化、数字化的输出;


我们大致分析一下安防设备互联网化的流程
设备RTSP地址的获取;
RTSP协议拉流;
RTSP转RTMP数据的处理;
RTMP推流;
流媒体转码与协议同步输出;
全终端的视频播放;
灵活的配置与调度;
设备RTSP地址的获取
在每一款设备的RTSP协议输出方式上,区别就各种各样了,有的是一个系列产品会有一个地址格式,有的是没有格式,直接IP+Port对了就可以,有的只支持UDP协议(例如很多移动终端设备或者mifi设备),最靠谱的还属于大厂(海康、大华)了,格式基本确定,而且流输出比较稳定;

下面我就对怎么获取到一款设备的RTSP地址说一下自己的经验:

判断摄像机IP Camera、网络硬盘录像机NVR是否支持RTSP协议,有一个非常基础的参考,就是在设备的后台配置中,查找是否有关于RTSP端口的配置,如果设备有RTSP端口的配置,那基本上该设备是支持RTSP协议的;

对于较为近期生产的大部分的视频设备:网络摄像机、网络硬盘录像机NVR基本都支持Onvif协议,RTSP地址通过Onvif发现就可以了,Onvif的发现工具大家可以到 www.easynvr.com 下载Onvif工具,通过Onvif探测就能够获取到RTSP地址;

对于没有Onvif辅助的设备,判断了设备支持RTSP协议后,就是找具体RTSP地址规则了,那么对于市面上的大部分摄像机那都基本上是海康大华的天下了,尤其是海康。这里就对我所接触的各家设备的RTSP地址做一个汇总:

海康DS系列设备:《最新海康摄像机、NVR、流媒体服务器、回放取流RTSP地址规则说明

海康其他老设备:《海康、大华IpCamera RTSP地址和格式》
大华设备:《海康、大华IpCamera RTSP地址和格式》
宇视设备:《宇视摄像机RTSP地址格式规则》
杂牌设备:杂牌设备的建议是,直接采用 rtsp://ip:port/试着播放一下,然后再就是去具体厂家问了,很多小厂不把RTSP做为主要输出内容,所以这一块做的也比较乱,效果一般;

市面上还是会有一些不输出RTSP协议的视频设备,比如很多特别贵的热成像设备(输出的分辨率还特别低),这些设备一般情况下只能通过SDK接入,那么我们也可以通过EasyIPCamera (https://github.com/EasyDarwin/EasyIPCamera)或者 EasyRTSPServer(https://github.com/tsingsee/EasyRTSPServer) 将这些非标设备进行RTSP标准化改造,先通过设备SDK取流到Server端,再通过EasyIPCamera或者EasyRTSPServer进行输出;
RTSP协议拉流
目前市面上两套相对较好的RTSP协议拉流技术框架,一个是live555,一个是ffmpeg,两套框架各有千秋,各有一系列的成功的案例:

live555:非常老牌的RTSP框架,十几年了,还在迭代与维护,作者Ross也以此为业,进行着开源+商业的运营,大家所熟知的VLC播放器,RTSP拉流采用的就是live555;
所以说,开源+商业化才是持久之道!

ffmpeg:ffmpeg就更不用说了,目前国内大部分的播放器,都用这个,RTSP模块自写自带的,兼容性也非常不错,不过要定制起来,流程就比较复杂;
我们在这一块分别参考live555和ffmpeg打造了两款RTSPClient工具:EasyRTSPClient和EasyStreamClient,这都是对几十万行级别代码的优化输出,站在巨人的肩膀上!

源自EasyRTSPClient Github介绍:An elegant, simple, high performance & high compatibility RTSP Client Utility,can use in RTSP Player,NVR,RTSP Relay,EasyRTSPClient can run in any platform ,such as x68/x64/Windows/Linux/Android/iOS/arm etc…,with flexible interface,EasyRTSPClient can fit almost all network IPCamera,very easy to use.简单、稳定、高效、易用的RTSPClient工具,支持Windows、Linux、ARM、Android、iOS等几乎所有平台,支持RTP Over TCP/UDP,支持断线重连,能够接入市面上99%以上的IPC,调用简单且成熟稳定!Github地址:https://github.com/tsingsee/EasyRTSPClient

EasyStreamClient:是一套RTSP、RTMP、HTTP等网络协议的拉流库,基本上只要是ffmpeg支持的,EasyStreamClient都支持,而且EasyStreamClient简化了调用的流程,强化了输出的结果,最重要的是支持了重连功能,非常易用!Github地址:https://github.com/tsingsee/EasyStreamClient

不能小视这两个功能组件的重要作用,在很多应用和项目中,大量的时间都是耗在这两个上面,每一家的设备都不一样,对协议标准的理解各有出入、各有一定的bug,作为直接面向一线设备的工具,大部分的兼容工作都在这两个组件上。

RTMP推流
跟RTSPClient拉流一样,RTMP推流同样有两个非常值得参考的开源项目:librtmp和ffmpeg,相比较来说,这里的ffmpeg推流在兼容性和持续输出上,会有一定局限,而且定制起来也会流程相对比较繁琐,我们目前主要的RTMP推流采用的是EasyRTMP。

EasyRTMP是一套调用简单、功能完善、运行高效稳定的RTMP功能组件,经过多年实战和线上运行打造,支持RTMP推送断线重连、环形缓冲、智能丢帧、网络事件回调,支持Windows、Linux、arm(hisiv100/hisiv200/hisiv300/hisiv400/etc…)、Android、iOS平台,支持市面上绝大部分的RTMP流媒体服务器,包括Wowza、Red5、ngnix_rtmp、crtmpserver等主流RTMP服务器,能够完美应用于各种行业的直播需求,手机直播、桌面直播、摄像机直播、课堂直播等等方面! Github地址:https://github.com/EasyDSS/EasyRTMP

我们几乎全线的产品都采用的是EasyRTMP进行的流媒体音视频标准化,EasyRTMP能够将输入的H.264、H.265、AAC进行非常低延时以及平滑的流转,这个是目前我们在视频标准化推流输出上唯一的选择!

RTSP转RTMP数据的处理
在数据的流转上,我们做了很多的工作,实际上这些工作用一个简单的ffmpeg.exe是可以完成的,但是最终都返工了,用了EasyRTSPLive、EasyRTMPLive、EasyNVR这样的中间件型服务或者流媒体网关服务。为什么呢?

用ffmpeg只能做到一个基本的DEMO演示的作用,在容错机制以及应对不同网络情况时,会有诸多的问题,例如,ffmpeg不能重连,只能靠手动控制其重新连接,或者采用程序反复调用连接,另一方面,存在兼容的问题,而且资源消耗非常大,在某些ffmpeg拉流转推流的场景下,ffmpeg对资源的消耗非常大;
还有一个是ffmpeg拉转推延时不可控,对于用户来说,属于一个黑盒状态,出了问题啥情况都不知道;

为了解决以上描述的这些问题,我们分别开发了EasyRTSPLive、EasyRTMPLive ,区别在于EasyRTSPLive只针对于RTSP协议的RTMP转推,而EasyRTMPLive是对于各种各样的流媒体协议的输入,例如RTSP、RTMP、HTTP、HLS等等等等的协议格式,都可以采用EasyRTMPLive输入,并做RTMP标准化输出,而且EasyRTMPLive所使用的EasyStreamClient还自带了软转码的功能,能将各种非标的音视频格式都能转化成为标准的格式进行输出;

EasyRTSPLive需要将安防输入的各种音频格式,例如PCMA(G.711A)、PCMU(G.711U)、G.726,进行转码成为互联网需要的AAC音频格式,AAC音频编码可选择用EasyDarwin开源的EasyAACEncoder,基于faac内核,效果非常好,而且现在很多支持浮点计算的芯片都能支持;

EasyNVR 是另一款基于EasyStreamClient和EasyRTMP的产品化程度更高的产品,这里只做一个大概的描述,就不深入讨论了:EasyNVR是一款拥有完整、自主、可控知识产权,同时又能够具备软硬一体功能的安防互联网化流媒体服务器,能够通过简单的网络摄像机通道配置,将传统监控行业里面的高清网络摄像机IP Camera、NVR等具有RTSP、Onvif协议输出的设备接入到EasyNVR,EasyNVR能够将这些视频源的音视频数据进行拉取,转换为RTMP/HLS,进行全平台终端H5直播(Web、Android、iOS),并且EasyNVR能够将视频源的直播数据对接到第三方CDN网络,实现互联网级别的直播分发。

对于技术实现的选择:
EasyRTSPLive:能方便有一定视频能力的开发者或者公司进行集成开发,而且对程序包体大小有要求,尽量要求精简、专注于RTSP等等特点;

EasyRTMPLive:如果想做一款全功能、全协议的视频编码器,那可以采用EasyRTMPLive,支持协议全、兼容扩展方便、站在ffmpeg巨人的肩膀上;

如果想低成本、快速、稳定、可靠、有效达到目标建议用EasyNVR;

流媒体转码与协议同步输出
一般情况下,在一些互联网直播的场景中,我们经常只需要通过EasyRTMP将RTMP流推送到CDN或者第三方公有云即可达到视频直播的目标,但是在很多*型项目或者私有场景项目,需要自建流媒体服务器,我们基本上采用的就是EasyDSS高性能流媒体服务器,EasyDSS内核也基本上是整套Easy系列的流媒体服务技术中台,对内、对外都用的是一个产品,极大地方便了各个开发者、部门、公司对流媒体技术的获取。

EasyDSS商用流媒体服务器是一款支持视频点播、转码、RTMP推流直播、RTMP/HLS直播分发、服务端录像、录像检索、录像下载、时移回放的商用流媒体服务器,采用业界优秀的流媒体框架模式设计,服务运行高效、稳定、可靠、易维护,支持RTMP直播、RTMP推送、HTTP点播、HLS直播,并支持关键帧缓冲,画面秒开等多种特性,能够接入WEB、Android、iOS、微信等全平台客户端,是移动互联网时代贴近企业点播/直播需求的一款接地气的流媒体服务器,配套OBS、EasyRTMP等直播推流工具以及EasyPlayer等网络播放器,可以形成一套完整的视频直播、录播解决方案,满足用户在各种行业场景的流媒体业务需求。

功能特点
接收RTMP推流:EasyDSS能够接收RTMP推流客户端推送的RTMP音视频流(H264+AAC),并转发给播放客户端;
分发RTMP流:EasyDSS提供RTMP流的高性能分发,RTMP播放客户端可直接连接EasyDSS进行播放;
分发HLS流:EasyDSS提供同步输出HLS流的功能,可以将推送的RTMP流进行实时HLS切片,并提供HLS流的高性能分发;
直播录像:支持将推送的直播流进行同步录像保存;
直播录像检索:支持检索系统的直播录像,提供录像检索和列表接口;
直播录像回放点播:可以点播录制的服务端录像,提供HLS点播,*seek与倍数播放功能;
录像下载:可以对检索到的录像段进行下载,另存为MP4文件;
HTTP服务器:EasyDSS同时也是一款高性能的HTTP服务器,用于提供HTTP访问,同时用于HLS流分发(具备nginx所有属性功能);
防盗链:持HTTP防盗链技术;
主动拉取RTMP流进行转发:EasyDSS支持对RTMP流的主动拉取,并将此RTMP流进行RTMP/HLS的转发;
转发RTMP流推送:支持将推送客户端推送的RTMP流,转发推送到其他RTMP流媒体服务器;
推流鉴权验证:支持对推送客户端的推送流进行推流验证,若无权限的推流地址,则不接收客户端推流;
推流信息统计:可以对推送流进行信息统计,包括推送时长、观看人数、起始时间、持续时长、视频码率、音频码率、推送流量等信息;
播放鉴权:支持播放客户端播放验证,无权限的播放地址将无法进行播放;
播放信息统计:可以对播放客户端的数量进行统计,并且可以统计客户端的开始时间、播放时长、播放流量等信息;
视频文件点播:支持点播HLS/mp4文件;
跨平台:支持多种平台部署运行,Windows、Linux;
二次开发:提供HTTP二次开发接口,可使用接口进行一定的二次开发;
全终端的视频播放
从以上的流程来看,我们采用的是RTMP推流输出的方式,但是如果说输出只是支持RTMP,已经是不能够满足需求的,或者说是逐步会被淘汰的,RTMP协议慢慢已经不适合做播放协议了,更多情况下只适合做推流协议,主要几个方面:

各大浏览器已经明确要淘汰flash了;
国内的flash播放已经逐步被商业化,很多时候播放还要运行广告插件才行;
目前RTMP推流到EasyDSS或者CDN、公有云流媒体服务器,基本都会同步输出RTMP、HLS(m3u8)协议,保障全平台、全终端的可播放;EasyDSS稍微优势一些,支持RTSP(兼容视频分析用途)、RTMP、HLS(m3u8)、HTTP-FLV(Web低延时);

前端播放用EasyPlayer.js能够达到全平台全终端兼容播放而且是免费的;

灵活的配置与调度
综上描述了很多,从设备到转发,再到流媒体和播放,其实一整套下来东西非常多,想要做的稳定一点,都需要花费很长很长的时间;

更多流媒体音视频资源
EasyDarwin开源流媒体服务器:www.EasyDarwin.org

EasyDSS高性能互联网直播服务:www.EasyDSS.com

EasyNVR安防视频可视化服务:www.EasyNVR.com

EasyNVS视频综合管理平台:www.EasyNVS.com

EasyNTS云组网:www.EasyNTS.com

EasyGBS国标GB/T28181服务器:www.EasyGBS.com

EasyRTC视频会议解决方案:www.EasyRTC.cn

Copyright © TSINGSEE.com Team 2012-2019


————————————————
版权声明:本文为CSDN博主「xiejiashu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiejiashu/article/details/95723362