EasyDarwin开源流媒体云平台之EasyRMS录播服务器功能设计_weixin_30348519的博客-程序员宅基地

技术标签: json  ffmpeg  数据库  

需求背景

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

获取更多信息

邮件:[email protected]

WEB:www.EasyDarwin.org

Copyright EasyDarwin.org 2012-2017

EasyDarwin

转载于:https://www.cnblogs.com/babosa/p/7348776.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30348519/article/details/97686505

智能推荐

JS:Vue项目浏览器直接上传文件到阿里云OSS_oss javascript vue-程序员宅基地

OSS Browser.js SDK文档:https://help.aliyun.com/document_detail/64041.htmlOSS设置路径:权限管理-跨域设置将来源设置成 *将Method设置成 GET, POST, PUT, DELETE, HEAD将Allowed Header设置成 *将Expose Header设置成 etag安装JDKnpm install ali-oss -Soss文件上传let OSS = require("ali-oss");//_oss javascript vue

spark2.0源码阅读 剖析spark-shell_spark shell 源码-程序员宅基地

spark2.0源码阅读 1剖析spark-shell文章目录spark2.0源码阅读 1剖析spark-shellspark-shell脚本spark-submit脚本spark-class脚本总结spark-shell脚本function main() { if $cygwin; then # Workaround for issue involving JLine and Cygwin # (see http://sourceforge.net/p/jline/bugs/4_spark shell 源码

PCL 读取点云文件+下采样点云+可视化点云+获取点云xyz坐标边界值_pcl读取点云文件_木key哇啦的博客-程序员宅基地

PCL 读取点云文件pcl::PointCloud<pcl::PointXYZRGB>::Ptr readPCD(std::string pcd_name) //读入点云文件{ pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>); if (pcl::io::loadPCDFile<pcl::PointXYZRGB>_pcl读取点云文件

CentOS 7.2 编译安装 posix扩展_centos安装posix-程序员宅基地

直接 yum install php-process 简单粗暴省事 即可安装pcntl和posix扩展编译安装首先查看服务器版本php -v比如我的版本是 php php-5.6.33,进入官网下载对应的安装包 下载地址下载地址下载完之后,解压tar zxvf php-5.6.33.tar.gz进入扩展目录cd php-5.6.3_centos安装posix

神经网络处理表格数据,神经网络如何识别图像_卷积神经网络处理表格数据-程序员宅基地

卷积神经网络就是将图像处理中的二维离散卷积运算和人工神经网络相结合。这种卷积运算可以用于自动提取特征,而卷积神经网络也主要应用于二维图像的识别。“深”的问题是一个不确定的概念,多少算深?有人认为除了输入层和输出层以外只包含一个隐层的神经网络就是浅层的,多个隐层的就是深层的。按照这样的说法,一个卷积神经网络如果包含一个输入层,一个卷积层,一个输出层,那它就是浅层的。但一般不这样用,何以然啊?使用卷积神经网络不断地去提取特征,特征越抽象,越有利于识别(分类)。那我就一定要将卷积神经网络设计成深层的啊!_卷积神经网络处理表格数据

nextElementSibling 属性_.nextelementsibling-程序员宅基地

nextElementSibling 返回当前元素在其父元素的子元素节点中的后一个元素节点,如果该元素已经是最后一个元素节点,则返回null,该属性是只读的._.nextelementsibling

随便推点

ViewPager中的fragment内容不显示,无报错问题解决-程序员宅基地

背景:楼主在做一个fragment切换的时候,用viewpager来做切换的动画,将需要去切换的fragmentA、fragmentB加入到fragmentAdapter中后,页面没有显示出来fragmentA或者fragmentB的内容。分析:adapter中的getcount和getItem返回值没有任何问题,fragmentA中的createview方法也已经走了。解决:最终找到问题发生...

MTK2625芯片资料/MT2625芯片资料汇总-程序员宅基地

MT2625这款物联网芯片是现在比较火的,很多工程师在做MT2625平台的开发,下面是在闯客网论坛中下载的规格书,现在分享给大家。mt2625是一种高度集成的芯片组,具有应用程序处理器,一种低功率多波段窄带物联网收发机和电源管理单元(pmu)。mt2625是基于手臂的,带有浮点微控制器单元(闯客网),与4mb psram集成以及4mb闪存。mt 2625还支持包括uart,i..._mt2625 datasheet

UVA 1615 Highway 高速公路 (区间选点)-程序员宅基地

题意:在一条线段上选出尽量少的点,使得和所有给出的n个点距离不超过D。分别计算出每个点在线段的满足条件的区间,然后就转化成了区间选点的问题了,按照右端点排序,相同时按照左端点排序,按照之前的排序一定保证了包含这个点的区间是连续的。贪心,每次选右边的端点,维护一个当前选择点的位置,每遇到区间就判断一下并更新一下点的位置。#include<bits/stdc++.h>usi..._在某个地区修建高速公路,高速公路可以视为x轴,长度为l。在一象限内有一些村庄,每

Revit二次开发之过滤器的使用-程序员宅基地

OfCategory是从大到小找,先找目标Category(如BuiltInCategory.OST_Doors);OfClass是从小到大找,先找族实例(找FamilyInstance、找Wall);所以尽量先OfCategory再OfClass(but其实结果都一样,顺序也是可以调换的)。

07.Spring Cloud Consul:服务治理与配置中心_服务治理配置_DNYDYS的博客-程序员宅基地

Spring Cloud Consul:服务治理与配置中心Consul 简介Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,Consul的方案更“一站式”,内置了服务注册与发现框 架、具有以下性质:支持服务治理:Consul作为注册中心时,微服务中的应用可以向Consul注册自己,并且可以从Consul获取其他应用信息;支持客户端负责均衡:包括Ribbon和Spring Cloud LoadBalancer;支持Zu_服务治理配置

C++编程语言STL之map及相关容器介绍_maprole c++-程序员宅基地

关联容器(associative-container)和顺序容器有着根本的不同:关联容器中的元素是按关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的。虽然关联容器的很多行为与顺序容器相同,但其不同之处反映了关键字的作用。关联容器支持高效的关键字查找和访问。两个主要的关联容器类型为map和set。map中的元素是一些关键字-值(key-value)对:“关键字”起索引的作用,“值”则表示与索引相关联的数据。set中每个元素只包含一个关键字。_maprole c++