前言

早在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 客户端

    1. EasyCamera 摄像机硬件在启动后,启动EasyCamera进程,向EasyCMS平台发送注册报文,并定期发送保活报文,维持摄像机与EasyCMS平台的TCP长连接;

    2. EasyCMS会对EasyCamera发送的注册报文进行权限验证,将验证通过的设备相关信息写入到redis中,包括设备所在的EasyCMS的信息关联写入redis;

    3. EasyClient向EasyCMS请求具体设备直播流,EasyCMS会在第一步在redis中查找设备是否在线,第二步会查找该设备是否已经存在流媒体转发信息,如果存在,则直接将改直播流信息响应给EasyClient,如果不存在,EasyCMS需要向EasyCamera发送启动直播流推送的命令,EasyCMS再将EasyCamera反馈的结果响应给EasyClient,EasyClient根据收到的结果进行播放;

    4. EasyDarwin在接收到EasyCamera直播推送后,将该设备的直播流信息写入到redis中,这样就方便第3步中EasyCMS直接对设备直播流信息进行检索;

    5. 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

获取更多信息

邮件:support@easydarwin.org

WEB:www.EasyDarwin.org

Copyright © EasyDarwin.org 2012-2016

EasyDarwin开源流媒体云平台设计与实现(分布式+负载均衡)的更多相关文章

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

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

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

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

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

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

  4. EasyDarwin开源流媒体云平台之EasyRMS录播服务器功能设计

    需求背景 EasyDarwin开发团队维护EasyDarwin开源流媒体服务器也已经很多年了,之前也陆陆续续尝试过很多种服务端录像的方案,有:在EasyDarwin中直接解析收到的RTP包,重新组包录 ...

  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开源流媒体服务器高性能设计之无锁队列

    本文来自EasyDarwin团队Fantasy(fantasy(at)easydarwin.org) 一. EasyDarwin任务队列实现 EasyDarwin的任务队列是通过OSQueue类来组织 ...

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

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

随机推荐

  1. FOJ Problem 2253 Salty Fish

                                                                                                        ...

  2. redis批量设置过期时间

    Redis 中有删除单个 Key 的指令 DEL,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux 的 xargs 指令来完成这个动作.代码如下: redis-cli keys &qu ...

  3. 如何发布第一个属于自己的npm包

    原文:https://segmentfault.com/a/1190000013940567 什么是NPM? NPM是随同NodeJS一起安装的javascript包管理工具,能解决NodeJS代码部 ...

  4. select与stdio混合使用的不良后果

    参考以下链接自己补充实验:http://www.cppblog.com/mysileng/archive/2013/01/15/197284.aspx?opt=admin int main(int a ...

  5. python re的findall和finditer

    记录一个现象: 今天在写程序的时候,发现finditer和findall返回的结果不同.一个为list,一个为iterator. 红色箭头的地方,用finditer写的时候,print(item.gr ...

  6. Python通用编程

    本文是Python通用编程系列教程,已全部更新完成,实现的目标是从零基础开始到精通Python编程语言.本教程不是对Python的内容进行泛泛而谈,而是精细化,深入化的讲解,共5个阶段,25章内容.所 ...

  7. 前端笔记之Vue(七)Vue-router&axios&Vue插件&Mock.js&cookie|session&加密

    一.Vue-router(路由) 1.1路由创建 官网:https://router.vuejs.org/zh/ 用 Vue.js + Vue Router 创建单页应用,是非常简单的.使用 Vue. ...

  8. chattr&chown&cat&cut&useradd&passwd&chage&usermod

    1.用chattr命令防止系统中某个关键文件被修改 chattr +i /etc/resolv.conf chattr -i /etc/resolv.conf 要想修改此文件就要把i属性去掉 lsat ...

  9. [Bzoj4942][Noi2017]整数(线段树)

    4942: [Noi2017]整数 Time Limit: 50 Sec  Memory Limit: 512 MBSubmit: 363  Solved: 237[Submit][Status][D ...

  10. BZOJ 1355 [Baltic2009] Bazinga

    题面 [题目描述] 对于给定的n个字符串S1,S2--,Sn,标号为1到n,请你找出一个最大的i使得标号小于i的字符串中存在一个不是i的子串. [输入描述]: 第一行包括一个整数t(1<=t&l ...