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) ...
随机推荐
- SPOJ QTREE4 - Query on a tree IV
You are given a tree (an acyclic undirected connected graph) with N nodes, and nodes numbered 1,2,3. ...
- 【MFC】半透明对话框(转)
原文转自 http://jingyan.baidu.com/article/656db918fd5b0ee381249ca1.html 在OnInitDialog()函数添加以下代码: //设置半透明 ...
- gerrit 安装
http://blog.csdn.net/ljchlx/article/details/21988471
- C语言集锦(一) C代码生成图片:BMP、PNG和JPEG
1.生成BMP图片 在学习图形图像的过程中,最简单和常见的格式是BMP和PPM.下面将给出生成BMP的极度精简代码,然后讲解BMP格式. #include <stdio.h> #inclu ...
- GNOME 3.x下安装配置小企鹅输入法框架及SunPinYin插件
fcitx 小企鹅输入法框架已经越来越成熟,并且具备极高的性能,配合 Sun PinYin 智能输入法就和 Windows 下的搜狗百度等输入法几乎无二了.事实上,现在Linux版本的搜狗输入法正是基 ...
- hdu 5438(类似拓扑排序)
Ponds Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Sub ...
- 洛谷——P1078 文化之旅
P1078 文化之旅 题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能 ...
- linux几种常见的文件内容查找和替换命令
作为一个以前没怎么接触过linux的小白,开始使用linux,各种不习惯,这周遇到一个文件内容测查找和替换的需求.学习了以下几种实现方式: 1.vi命令下的查找和替换 1.1 vi下的查找 /patt ...
- tomcat启动文件
home目录下创建run.bat文件,文件内容如下: @echo off set JAVA_OPTS=-server -Xms1024m -Xmx1024m ^-XX:+UseG1GC ^-XX:Ma ...
- 百度 BAE 项目部署
转载:http://www.cnblogs.com/shamoyuu/p/node_bae.html 百度有一个应用引擎,价格非常便宜,Java的tomcat每天4毛钱,node每天2毛钱,我以前在上 ...