需求背景

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

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

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,这样检索服务检索出来的录像可以直接面向全平台终端回放,非常通用;

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开源流媒体云平台之EasyRMS录播服务器功能设计的更多相关文章

  1. EasyDarwin开源流媒体云平台支持EasyCamera摄像机、EasyCamera手机直播监控、EasyNVR等多终端接入

    云平台架构 EasyDarwin开源流媒体云平台目前已经包括了EasyCMS中心管理服务.EasyDarwin流媒体服务.EasyCamera设备端(支持Arm_Linux.Android.PC).E ...

  2. EasyDarwin开源流媒体云平台设计与实现(分布式+负载均衡)

    前言 早在2013年我就设计了一套架构非常简单的分布式流媒体服务器平台<基于Darwin实现的分布式流媒体直播服务器系统>,当时的考虑如今看来有诸多的细节点没有考虑到:1.CMS是单点部署 ...

  3. EasyDarwin开源流媒体云平台之语音对讲功能设计与实现

    本文由EasyDarwin开源团队成员Alex贡献:http://blog.csdn.net/cai6811376/article/details/52006958 EasyDarwin云平台一直在稳 ...

  4. EasyCamera Android安卓移动视频监控单兵设备接入EasyDarwin开源流媒体云平台

    前言 随着Android系统的不断更新和发展,现在越来越多的硬件产品选择用安卓系统作为运行环境,电视机,机顶盒.门禁.行车记录仪.车载系统.单兵设备等等,Android系统底层还是Linux,但对上层 ...

  5. EasyDarwin开源流媒体云平台之云台ptz控制设计与实现

    本文转自EasyDarwin开源团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/51912692 近日,EasyDarwin云平 ...

  6. EasyDarwin开源流媒体云平台VS调试断点提示“还没有为该文档加载任何符号”的解决办法

    本文转自EasyDarwin开源团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/52063666 近日,我们EasyDarwin ...

  7. EasyDarwin开源流媒体云平台中boost Base64编解码后与源长度不匹配的bug

    本文转自EasyDarwin团队Alex的博客:http://blog.csdn.net/cai6811376 EasyDarwin云平台中部分协议使用了Base64编码昨晚报文通信的载体.比如在对摄 ...

  8. 开源流媒体云视频平台EasyDarwin中EasyCMS服务是如何进行命令转发和消息路由的

    EasyCMS介绍 EasyCMS做为EasyDarwin开源流媒体云平台解决方案的一部分,主要进行的是设备的接入和Session(DeviceSession & ClientSession) ...

  9. EasyDarwin开源流媒体项目

    本文转自EasyDarwin CSDN官方博客:http://blog.csdn.net/easydarwin EasyDarwin是由国内开源流媒体团队维护和迭代的一整套开源流媒体视频平台框架,从2 ...

随机推荐

  1. Nginx报504 gateway timeout错误的解决方法

    转载文章来源:http://www.111cn.net/sys/nginx/90669.htm(若侵删) Nginx报504 gateway timeout错误引起,一个是文件配置问题,另一个是相关处 ...

  2. 哈工大CSAPP大作业

    第1章 概述 1.1 Hello简介 hello的源码hello.c文件,要生成可执行文件,首先要进行预处理,其次要进行编译生成汇编代码,接着进行汇编处理生成目标文件,目标文件通过链接器形成一个可执行 ...

  3. 【MFC】 点击不同的按钮后在界面同一位置显示不同的对话框内容(转)

    原文转自 http://bbs.csdn.net/topics/391039432 如图类似Tab控件的功能    但Tab控件按钮是固定的上下左右  不方便     所以想自己重新做个这种   我M ...

  4. hdu 4939 2014 Multi-University Training Contest 7 1005

    Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/ ...

  5. Django 博客首页视图

    Django 处理 HTTP 请求 Web 应用的交互过程其实就是 HTTP 请求与响应的过程.无论是在 PC 端还是移动端,我们通常使用浏览器来上网,上网流程大致来说是这样的: 我们打开浏览器,在地 ...

  6. 矢量图和Word:EPS,PDF,EMF和SVG

    1.EMF和Word 在学校的时候,我思考过一个问题,论文中的插图如何保证清晰度.关键之一就是使用矢量图.参考知乎问题:如何在论文中画出漂亮的插图?.常见的矢量图包括:EPS,EMF和SVG.SVG适 ...

  7. react-native初始化项目的时候安装失败,如何解决【摘】

    首先初始化项目报错:  解决方法: 将这个版本号改为: 然后将这里: 改为:  版本号相对应 然后便可安装成功! [注:转载:https://blog.csdn.net/wwrzyy/article/ ...

  8. [原创][Verilog]个人.v文件书写规范

    1> 文件名命名,小些单词为主且从命名中可以大致读出其功能,例如:fpga_power.v,can_ctrl.v等命名. 2> 顶层top文件的输入输出IO信号使用大些表示,且加上”i/o ...

  9. sublime快捷键设置

    1.sublime自带的快捷键设置:这里的super在mac下是指command键 右边的内容表示用户自定义的快捷键:比如如图所示command+d表示复制光标所在行 常用操作:复制粘贴什么的太常用的 ...

  10. git 使用及常用命令

    git在团队项目中的使用流程 1.首先从一个git远程仓库中clone项目到本地 ? 1 git clone 仓库地址 2.创建开发分支 一般我们写代码不会在master分支上面写,而是新建一个分支 ...