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) ...
随机推荐
- 理解 Glance
OpenStack 由 Glance 提供 Image 服务. 理解 Image 要理解 Image Service 先得搞清楚什么是 Image 以及为什么要用 Image? 在传统 IT 环境下, ...
- OpenStack 通用设计思路
API 前端服务 每个 OpenStack 组件可能包含若干子服务,其中必定有一个 API 服务负责接收客户请求. 以 Nova 为例,nova-api 作为 Nova 组件对外的唯一窗口,向客户暴露 ...
- SpringCloud-分布式配置中心【入门介绍】
案例代码:https://github.com/q279583842q/springcloud-e-book 一. 为什么需要使用配置中心 1 服务配置的现状 2 常用的配置管理解决方案的缺点 3 为 ...
- javascript 函数重载另一种实现办法
最近在读javascript忍者 感受下jquery作者 john Resig对于js的独到见解. 先上代码: function addMethod(object,name,fn){ var old ...
- HDU 4405: Aeroplane chess
类型:概率DP 题意:一条直线下飞行棋,色子六个面等概率.同时存在一些飞机航线,到了某个点可以直接飞到后面的另一个点,可以连飞,保证一个点至多一条航线.求到达或者超过终点 所需要 掷色子的期望次数. ...
- TStringList的Find,IndexOf和Sort
procedure TForm1.Button1Click(Sender: TObject); var MyList: TStringList; begin MyList := TStringList ...
- hdu 1065(推公式)
I Think I Need a Houseboat Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- 第2章 Spring Boot 文档
Spring Boot 文档 本节简要介绍了Spring Boot文档,是整个文档的参考指南. 您可以完整阅读本参考指南,或者如果您不感兴趣的话可以跳过该部分. 1. 关于文档 Spring Boot ...
- linux下的C语言开发(网络编程)
http://blog.csdn.net/feixiaoxing/article/details/7259675 [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing ...
- C# 解析迅雷链接成正常的Http链接
目前热门剧司马懿第一集的迅雷下载地址是: thunder://QUFodHRwOi8vZGwxMjIuODBzLmltOjkyMC8xNzA2L1vlpKflhptTU+mprOaHv+S5i+WGm ...