EasyDarwin开源流媒体云平台之EasyRMS录播服务器功能设计

需求背景

EasyDarwin开发团队维护EasyDarwin开源流媒体服务器也已经很多年了,之前也陆陆续续尝试过很多种服务端录像的方案,有:在EasyDarwin中直接解析收到的RTP包,重新组包录像;也有:在EasyDarwin中新增一个RecordModule,再以RTSPClient的方式请求127.0.0.1自己的直播流录像,但这些始终都没有成气候;

我们的想法是能够让整套EasyDarwin的系统更加灵活起来,各个服务单元都非常内聚地做自己的本职工作,EasyDarwin是流媒体分发服务器,那就只做流媒体分发,,EasyCMS是设备长连接管理服务器,那就只做TCP Session维护,,EasyUMS是接口服务器,那就实现基础的用户管理/设备管理/后台和接口,,同样,我们计划做的EasyRMS录像服务器,那就专门做拉流录像,然后各个服务器之间采用http接口+redis相互沟通控制:

EasyRMS

EasyDarwin开源平台架构

乍一看整个EasyDarwin开源平台的架构是不容易一次性弄懂其架构思路和运行流程的,先从基本的架构想法上来说,就是上面说到的,各个单元干各自擅长的事情,管理连接的就管理连接、直播分发的就直播分发、录像的就录像、对外接口的就对外接口,当用户客户端EasyClient需要到各种不同数据的时候,就找不同的服务单元获取数据即可:

  • 客户端需要获取所有在线和离线的设备列表:

    EasyClient只需要在调用完成EasyUMS的登录接口之后,从EasyUMS获取相应的列表关系接口,返回给客户端进行展示;

  • 客户端要获取直播流,调用EasyCMS获取直播流的接口,获取到直播播放地址,进行播放;

  • 客户端要控制设备转动、向设备发送喊话,调用EasyCMS的ptz、talk接口,即可实现转动控制与喊话的功能;

  • 客户端要获取设备录像列表,直接向EasyUMS获取录像的列表,客户端在通过录像检索的结果,找EasyRMS进行录像回放;

从这个上面的基本思想上可以看出,各个服务单元都做的是自己非常单一功能的事情,这样就能很好的保证系统的高可扩展性和架构的稳定性,通过嫁接各种不同功能类型的服务单元,就可以变换实现非常多的场景的需求;

EasyRMS的架构

经过一周时间的技术调研,再结合之前版本的EasyRMS的成功实践经验与整体开源的要求,我们决定采用:EasyDarwin框架+ffmpeg实现EasyRMS:

  • EasyDarwin的主体框架我们成功运行在很多案例中了,能够成功嫁接到EasyRMS中来,做为底层基础结构,对外提供http+json接口、管理录像Session、以及可配合redis扩展实现分布式录像功能;

  • ffmpeg毫无疑问,目前流媒体中最牛x的项目,通用性和功能性极强,能够直接面向各种视频源格式:RTSP、HTTP、RTMP、RTP、UDP,录像输出成m3u8+ts;

  • 录像管理结构,可以采用上述的m3u8+ts,以目录形式管理,按照:设备ID/年月日/时分秒 的目录结构进行录像,最小检索单元是目录级的m3u8,这样检索服务检索出来的录像可以直接面向全平台终端回放,非常通用;

rms

EasyRMS的迭代方向

按照上一节中的架构,EasyRMS还是一个单纯的录像服务器,那么后续,还要为EasyRMS配套开发一个录像计划与录像管理服务:

  • 录像计划,定时录像;

  • 录像管理,7天、30天录像管理,磁盘管理;

  • 录像图形化归档,这个就是上层做入库,图形化报表的功能了;

我们计划采用node来开发这种配套的录像管理服务;

关注EasyRMS项目

EasyRMS开源项目:https://github.com/EasyDarwin/EasyRMS

EasyDarwin开源项目:https://github.com/EasyDarwin

获取更多信息

邮件:support@easydarwin.org

WEB:www.EasyDarwin.org

Copyright © EasyDarwin.org 2012-2017

EasyDarwin

原文地址:https://www.cnblogs.com/babosa/p/7348776.html