EasyDarwin开源流媒体云平台设计与实现(分布式+负载均衡)
前言
早在2013年我就设计了一套架构非常简单的分布式流媒体服务器平台《基于Darwin实现的分布式流媒体直播服务器系统》,当时的考虑如今看来有诸多的细节点没有考虑到:1、CMS是单点部署,无法扩展设备注册节点服务器;2、EasyDarwin流媒体服务器虽然可以分布式部署,但负载信息都是以Hash map的形式存在CMS的内存中的,EasyDarwin与CMS保持着长连接信令交互,这种形式只能够实现功能,但在架构扩展性上还是有太多瓶颈;3、协议采用的是RTSP协议及其扩展字段来做的,协议对现在流行的平台无关和移动端都不是很友好;
全新的EasyDarwin流媒体云平台,突出云平台的概念,无论是EasyCMS设备管理与接入服务器,EasyDarwin流媒体服务器,还是后续要扩展的EasyRMS录像存储服务器,都能够分布式、平行部署、无限扩容,云端各个节点的服务单元都将负载信息写到共享的redis中进行数据共享,EasyCMS将在线设备相关信息写入到redis,EasyDarwin将负载信息和流媒体直播相关信息写入redis,这样在多个EasyCMS、EasyDarwin之间就可以进行直播级联,Session共享,Token验证等功能,框架图:

实现概述
EasyDarwin开源流媒体云平台在2016.06.01发布了第一版,这个版本架构涉及四个方面的单元:
- EasyCMS 设备接入与管理服务器
- EasyDarwin 流媒体服务器
- EasyCamera 摄像机
EasyClient 客户端
EasyCamera 摄像机硬件在启动后,启动EasyCamera进程,向EasyCMS平台发送注册报文,并定期发送保活报文,维持摄像机与EasyCMS平台的TCP长连接;
EasyCMS会对EasyCamera发送的注册报文进行权限验证,将验证通过的设备相关信息写入到redis中,包括设备所在的EasyCMS的信息关联写入redis;
EasyClient向EasyCMS请求具体设备直播流,EasyCMS会在第一步在redis中查找设备是否在线,第二步会查找该设备是否已经存在流媒体转发信息,如果存在,则直接将改直播流信息响应给EasyClient,如果不存在,EasyCMS需要向EasyCamera发送启动直播流推送的命令,EasyCMS再将EasyCamera反馈的结果响应给EasyClient,EasyClient根据收到的结果进行播放;
EasyDarwin在接收到EasyCamera直播推送后,将该设备的直播流信息写入到redis中,这样就方便第3步中EasyCMS直接对设备直播流信息进行检索;
EasyDarwin会定期检查设备直播流的客户端数量检查,当设备的Output数量由 > 0 减为0,或者在EasyDarwin内部巡检中发现规定事件内没有客户端请求,EasyDarwin会向EasyCMS发送设备直播流释放请求,EasyCMS再通过信令发送给EasyCamera,停止EasyCamera向EasyDarwin推送直播流;
这就是整个EasyDarwin开源云平台直播的流程简述,内部有比较多的细节过程,这里就不一一细述了,具体还要看我们EasyDarwin云平台的实现源码和详细协议报文;
后续迭代
实现EasyDarwin开源流媒体云平台v1.0版本只是云平台迭代的开始,后续云平台一方面将会接入EasyCamera手机端、EasyNVR等设备,另一方面平台内部将会进一步优化平台架构,加入EasyRMS录像与回放服务,智能分析服务,等其他服务器单元,EasyDarwin云平台在对外接口上做减法,客户端RESTful接口调用非常简单,设备接入与交互流程协议也非常易懂,对内做加法,云平台会扩展更多的相关服务单元;
源码下载
Github:https://github.com/EasyDarwin
EasyClient:http://fir.im/EasyClient
EasyCamera摄像机硬件:http://www.easydarwin.org/camera/EasyCamera_HX_HI3518C_H.html
相关视频教程:http://edu.csdn.net/agency/index/213
获取更多信息
Copyright © EasyDarwin.org 2012-2016

EasyDarwin开源流媒体云平台设计与实现(分布式+负载均衡)的更多相关文章
- EasyCamera Android安卓移动视频监控单兵设备接入EasyDarwin开源流媒体云平台
前言 随着Android系统的不断更新和发展,现在越来越多的硬件产品选择用安卓系统作为运行环境,电视机,机顶盒.门禁.行车记录仪.车载系统.单兵设备等等,Android系统底层还是Linux,但对上层 ...
- EasyDarwin开源流媒体云平台之语音对讲功能设计与实现
本文由EasyDarwin开源团队成员Alex贡献:http://blog.csdn.net/cai6811376/article/details/52006958 EasyDarwin云平台一直在稳 ...
- EasyDarwin开源流媒体云平台支持EasyCamera摄像机、EasyCamera手机直播监控、EasyNVR等多终端接入
云平台架构 EasyDarwin开源流媒体云平台目前已经包括了EasyCMS中心管理服务.EasyDarwin流媒体服务.EasyCamera设备端(支持Arm_Linux.Android.PC).E ...
- EasyDarwin开源流媒体云平台之EasyRMS录播服务器功能设计
需求背景 EasyDarwin开发团队维护EasyDarwin开源流媒体服务器也已经很多年了,之前也陆陆续续尝试过很多种服务端录像的方案,有:在EasyDarwin中直接解析收到的RTP包,重新组包录 ...
- EasyDarwin开源流媒体云平台之云台ptz控制设计与实现
本文转自EasyDarwin开源团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/51912692 近日,EasyDarwin云平 ...
- EasyDarwin开源流媒体云平台VS调试断点提示“还没有为该文档加载任何符号”的解决办法
本文转自EasyDarwin开源团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/52063666 近日,我们EasyDarwin ...
- EasyDarwin开源流媒体云平台中boost Base64编解码后与源长度不匹配的bug
本文转自EasyDarwin团队Alex的博客:http://blog.csdn.net/cai6811376 EasyDarwin云平台中部分协议使用了Base64编码昨晚报文通信的载体.比如在对摄 ...
- EasyDarwin开源流媒体服务器高性能设计之无锁队列
本文来自EasyDarwin团队Fantasy(fantasy(at)easydarwin.org) 一. EasyDarwin任务队列实现 EasyDarwin的任务队列是通过OSQueue类来组织 ...
- 开源流媒体云视频平台EasyDarwin中EasyCMS服务是如何进行命令转发和消息路由的
EasyCMS介绍 EasyCMS做为EasyDarwin开源流媒体云平台解决方案的一部分,主要进行的是设备的接入和Session(DeviceSession & ClientSession) ...
随机推荐
- PHP解码Json(json_decode)字符串返回NULL的原因及解决方法(转载)
本文主要为大家讲解了php在使用json_decode函数解码json字符串时,解码不成功返回NULL的问题原因分析和解决方法,感兴趣的同学参考下. 一般来说,php对json字符串解码使用json_ ...
- 去掉 NavigationBar 底部的那条黑线
//加入下面两行代码即可[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UI ...
- 洛谷—— P1849 [USACO12MAR]拖拉机Tractor
https://www.luogu.org/problemnew/show/P1849 题目描述 After a long day of work, Farmer John completely fo ...
- 采集网站特殊文件Meta信息
采集网站特殊文件Meta信息 元(Meta)信息是描述文件的属性的特殊信息,如文件的所有者.联系方式.机构名.邮件地址等信息.而网站中常常会有共享的文档文件,如PDF.Excel.Word.这些文 ...
- Django-自己写的py文件调用models&Non-ASCII character报错&url接收参数
1.这个设置是网上能查到的最多的,但是没解决我的问题: Django的models.py在外部独立使用,新建一个文件夹,和monitor1目录平级 import sys,os sys.path.app ...
- BZOJ题目(持续更新)
bzoj1009:kmp想法+递推+矩阵快速幂.很好的想法,考虑用长串去kmp匹配短串,dp[i][j]表示匹配指针分别指在i.j位置时候,前i位母字符串一共有多少种可能性,那么dp[i][j]=Σd ...
- Ant -----ant标签和自定义任务
随便记一下 Ant的用法吧.ant ,maven, gradle ,三个打包工具到齐了,Ant 常见标签解析,ant 自定义task . <?xml version="1.0" ...
- IOS 教你玩转UITableViewController和TableView
iphone和Ipad开发中UITableViewController和TableView应该是用得比較多得控件. 可是你是会由于写这些控件写得多了而厌烦. 全部怎么让这个控件一直能用.怎么让这个控件 ...
- 【Todo】Tomcat与Jetty的比较 以及Tomcat架构的学习
主要参考这篇文章: http://blog.csdn.net/qing_2012/article/details/8276789 然后Tomcat原理的介绍,可以看这篇文章: http://www.i ...
- Python基础语法02-运算符
Python 运算符 算术运算符 比较(关系)运算符 赋值运算符 逻辑运算符 位运算符 成员运算符 身份运算符 运算符优先级 Python运算符优先级 以下表格列出了从最高到最低优先级的所有运算符: ...