需求背景 EasyDarwin开发团队维护EasyDarwin开源流媒体服务器也已经很多年了,之前也陆陆续续尝试过很多种服务端录像的方案,有:在EasyDarwin中直接解析收到的RTP包,重新组包录像:也有:在EasyDarwin中新增一个RecordModule,再以RTSPClient的方式请求127.0.0.1自己的直播流录像,但这些始终都没有成气候: 我们的想法是能够让整套EasyDarwin的系统更加灵活起来,各个服务单元都非常内聚地做自己的本职工作,EasyDarwin是流媒体分发…
云平台架构 EasyDarwin开源流媒体云平台目前已经包括了EasyCMS中心管理服务.EasyDarwin流媒体服务.EasyCamera设备端(支持Arm_Linux.Android.PC).EasyNVR(支持ARM主机.PC).EasyClient客户端,整个开源云平台经过一段时间的运行测试,表现稳定: 设备接入 目前EasyCamera已经支持了摄像机接入和Android手机端接入,EasyNVR支持普通RTSP摄像机的接入,所有设备都是按照统一的协议标准接入到EasyDarwin云…
前言 早在2013年我就设计了一套架构非常简单的分布式流媒体服务器平台<基于Darwin实现的分布式流媒体直播服务器系统>,当时的考虑如今看来有诸多的细节点没有考虑到:1.CMS是单点部署,无法扩展设备注册节点服务器:2.EasyDarwin流媒体服务器虽然可以分布式部署,但负载信息都是以Hash map的形式存在CMS的内存中的,EasyDarwin与CMS保持着长连接信令交互,这种形式只能够实现功能,但在架构扩展性上还是有太多瓶颈:3.协议采用的是RTSP协议及其扩展字段来做的,协议对现在…
本文由EasyDarwin开源团队成员Alex贡献:http://blog.csdn.net/cai6811376/article/details/52006958 EasyDarwin云平台一直在稳步的升级迭代中,近日,EasyDarwin云平台实现了语音对讲的功能.对讲功能的加入,标志着EasyDarwin云平台进一步的完善. 流程设计 客户端使用POST的方式在body中携带协议报文向云平台发送开始对讲命令: 云平台组织协议报文向指定的设备发送: 设备执行开始对讲命令后向云平台返回相应报文…
前言 随着Android系统的不断更新和发展,现在越来越多的硬件产品选择用安卓系统作为运行环境,电视机,机顶盒.门禁.行车记录仪.车载系统.单兵设备等等,Android系统底层还是Linux,但对上层的开发和维护就变得容易很多,比如以往需要在硬件上开发一个图形界面,流程就会非常复杂,但依托于安卓系统,可以绕开比较多的Linux系统底层开发,直接采用Java+jni可以达到非常稳定和高效的产品效果,这里尤为突出的要说到移动单兵设备,或者行业应用需要的移动监控设备,使用Android做设备系统,具有…
本文转自EasyDarwin开源团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/51912692 近日,EasyDarwin云平台加入云台控制功能,完善了云平台的功能,提升了用户体验.具体设计以及实现如下. 流程设计 客户端通过RESTful接口向云平台发送控制命令: 云平台组织控制报文向设备发送: 设备执行后向云平台返回控制响应报文: 云平台接收响应报文后将控制结果返回给客户端. 接口设计 首先我们设计云台控制的接口,接口…
本文转自EasyDarwin开源团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/52063666 近日,我们EasyDarwin团队在调试EasyDarwin的时候遇到有些C++源文件无法命中断点,提示"当前不会命中断点.还没有为该文档加载任何符号". 这里是因为,有些源文件的调试信息被禁用了,生成不了调试符号.只需要将源文件的"调试信息格式"设置一下就可以了. 调试信息格式说明 /Z7./Zi…
本文转自EasyDarwin团队Alex的博客:http://blog.csdn.net/cai6811376 EasyDarwin云平台中部分协议使用了Base64编码昨晚报文通信的载体.比如在对摄像机进行对讲操作时,客户端将采集的音频数据经过Base64编码,通过POST的方式将组织的协议数据发送到EasyCMS,EasyCMS再对设备进行操作. 当设备接收到音频数据时,将Base64编码后的数据进行解码,得到音频数据,将音频数据播放出来. 这里,我们以前的Base64编解码是这样写的.(使…
EasyCMS介绍 EasyCMS做为EasyDarwin开源流媒体云平台解决方案的一部分,主要进行的是设备的接入和Session(DeviceSession & ClientSession)管理,同时用户也可以复用做为其他类型项目设备接入与管理的框架,EasyCMS也源于EasyDarwin服务架构,具备一套完整的网络I/O框架以及Utility,开发者很容易在EasyDarwin的基础上开发跨平台服务程序,例如Windows.Linux.Mac.Solaris等系统平台,只要一次熟悉,将会受…
本文转自EasyDarwin CSDN官方博客:http://blog.csdn.net/easydarwin EasyDarwin是由国内开源流媒体团队维护和迭代的一整套开源流媒体视频平台框架,从2012年12月创建并发展至今,包含有单点服务的开源流媒体服务器,和扩展后的流媒体云平台架构的开源框架,开辟了诸多的优质开源项目,能更好地帮助广大流媒体开发者和创业型企业快速构建流媒体服务平台,更快.更简单地实现最新的移动互联网(安卓.iOS.H5.微信)流媒体直播与点播的需求,尤其是安防行业与互联网…
EasyDarwin目前正在做的开源流媒体云平台架构:…
EasyDarwin开源流媒体服务器(www.easydarwin.org)现在使用Go版本实现了.最新的代码提交,已经支持了推流(或者拉流)的同时进行本地存储. 本地存储的原理,是在推流的同时启动ffmpeg作为一路Client来做存储.ffmpeg在demux和mux的工作方面已经十分成熟,我们没必要再重复发明轮子.因此这种做法十分取巧而且简单有效,也不会侵入原来的代码架构.如下图所示: RTSP摄像机EasyDarwin本地存储推流使用ffmpeg进行拉流和存储RTSP摄像机EasyDar…
背景 近期跟开源团队商量,想在EasyDarwin上继续做一些功能扩展,目前EasyDarwin开源流媒体服务器只能够实现高效的RTSP推流直播转发/分发功能,输入与输出都是RTSP/RTP流,不能够很好滴满足当下日益火热的互联网直播/录播的需求,我们计划在当前节点EasyDarwin-v7.3.17.0325基础上继续扩展几个功能: EasyDarwin服务器端直播存储功能: 对RTSP直播推流同步输出RTMP.HLS直播功能: 直接接入RTSP IPCamera输出RTMP.HLS直播功能:…
title: Node版本EasyDarwin开发心得 date: 2018-03-27 22:46:15 tags: 年后着手Node版本EasyDarwin的开发工作,截止到今天2018年03月27日上线了第一个版本,今天小米发布了MIX2S, 致敬! 致敬! 关于RTSP协议 目前这个第一版暂时仅支持RTSP Over TCP, 不过RTSP Over UDP也会很快实现.总体来说, RTSP协议比较简单.开发过程中对RTSP协议的理解主要参考了 rtsp协议详解 这篇文章.sdp的解析一…
EasyDarwin开源流媒体服务器(www.easydarwin.org),拉转推是一个很有意义的功能,它可将一个独立的RTSP数据源"拉"到服务器,再通过转发协议转发给多个客户端,或者通过EasyDarwin的本地存储功能进行存储.国内大多摄像机都支持RTSP协议,通过拉转推可将第三方摄像机接入到EasyDarwin服务器. IPCEasyDarwin第三方RTSP源本地存储Client1Client2Client3拉流拉流ffmpeg转发转发转发IPCEasyDarwin第三方R…
本文来自EasyDarwin团队Fantasy(fantasy(at)easydarwin.org) 一. EasyDarwin网络模型介绍 EventContext负责监听全部网络读写事件.EventContext::RequestEvent每次插入一个监听事件到 监听列表(select 文件描写叙述符集合),EventThread::Entry()死循环监听加入到该FD_SET的全部文件描写叙述符的 事件.Entry()->select_waitevent()每次返回下一个要处理的事件节点,…
本文转自EasyDarwin开源团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/52400226 EasyDarwin团队的Babosa对EasyDarwin流媒体服务器的性能瓶颈进行了分析,并提出了优化方案.EasyDarwin开源流媒体服务器性能瓶颈分析及优化方案设计 这里,根据Babosa提出的优化方案,以及Work-stealing的算法特性,提出用Work-stealing算法对EasyDarwin进行优化. 什么…
EasyDarwin开源社区出视频教程了,经过几个深夜的努力,终于将第一次课程的5个课时的视频教程录好<EasyDarwin开源流媒体服务器:编译.配置.部署>,EasyDarwin后面会继续在CSDN学院提供更多.更前沿的流媒体音视频技术,希望能够对大家有所帮助,EasyDarwin视频教程:http://edu.csdn.net/agency/index/213 获取更多信息 邮件:support@easydarwin.org WEB:www.EasyDarwin.org Copyrigh…
本文来自EasyDarwin团队Fantasy(fantasy(at)easydarwin.org) 一. EasyDarwin网络模型介绍 EventContext负责监听所有网络读写事件,EventContext::RequestEvent每次插入一个监听事件到 监听列表(select 文件描述符集合),EventThread::Entry()死循环监听添加到该FD_SET的所有文件描述符的 事件.Entry()->select_waitevent()每次返回下一个要处理的事件节点,包括事件…
最近在开发EasyDarwin开源流媒体服务器HLS直播的时候发现一个现象:在PC上用flash player播放HLS和在ios上面播放HLS时,效果明显不同,在ios上播放非常稳定,而在flash player上播放会经常性卡住,需要重新刷新网页才能够正常播放.经过不断跟踪调试,发现问题主要出在浏览器上,浏览器在请求.更新m3u8文件的过程中,有缓存,导致请求到的m3u8列表是过期的,里面的ts列表有文件已经被删除了,导致m3u8播放器请求已经不存在的ts文件,就卡住了,所以我们测试过,比较…
EasyHLS  Github:https://github.com/EasyDarwin/EasyHLS EasyHLS是什么? EasyHLS是EasyDarwin开源流媒体社区开发的一款HLS打包库,接口非常简单,只需要传入打包的文件名.切片存放的目录.打包间隔以及切片数,EasyHLS库就能轻松将H264+AAC的流媒体切片,提供给WEB服务器进行HLS流媒体发布,我们提供了两套操作示例: EasyHLS_RTSP:以RTSPClient的形式,从RTSP URL将摄像机音视频获取到本地…
本文转自EasyDarwin团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/52755298 EasyCamera接收云平台实时视频请求命令,会向EasyDarwin流媒体服务器进行推流操作.那么EasyCamera是如何通过海康摄像机SDK获取到媒体流的呢? 我们继续看海康摄像机SDK 这里使用NET_DVR_RealPlay_V40/NET_DVR_StopRealPlay接口控制实时视频. 在获取实时视频调用之前,我们…
最近在帮助EasyDarwin的用户部署EasyNVR+EasyDarwin云平台+EasyClient方案的过程中,遇到一个问题,EasyNVR分布在用户各地区现场的内网中,EasyDarwin云平台部署在公网中,当EasyNVR在本地运行推送到用户自己的EasyDarwin云平台,完全没问题,当EasyNVR部署在用户设备所在的内网,设备上线.http+json信令都能非常顺利通过,就是流媒体数据无法推送到云端EasyDarwin流媒体服务器,我们再将EasyNVR和EasyDarwin云平…
背景分析 在之前的一篇博客<web无插件播放RTSP摄像机方案,拒绝插件,拥抱H5!>中,描述了实现一套H5无插件直播方案的各个组件的参考建议,又在博客<EasyNVR H5流媒体服务器方案架构设计之视频能力平台>中对整体的架构设计思路做了总结,做高内聚.低耦合的视频能力平台,不涉足业务部分!那么今天,我们来公开一下EasyNVR到底是如何实现这些功能的: 一.程序框架 熟悉EasyDarwin的同学都知道,EasyDarwin作为老牌的流媒体功能框架,在很多领域是完全能够满足开发…
本文转自EasyDarwin开源团队成员的博客:http://blog.csdn.net/ss00_2012/article/details/52330838 在前面<EasyDarwin拉流支持基本认证和摘要认证>一文中讲述了如何通过修改qtaccess.qtusers来让EasyDarwin对我们创建的用户支持基本认证和摘要认证,之后在与群主的沟通中感觉这种方式的体验性太差,用户的需求是多方面的,可能有的想在配置文件中配置.有的想从数据库中读取.有的想在程序中写死--,我们需要提供一种便于…
EasyDarwin现有架构介绍 EasyDarwin的现有架构对网络事件的处理是这样的,每一个Socket连接在EasyDarwin内部的对应存在形式就是一个Session,不论是RTSP服务对应的RTSPSession,还是HTTP服务对应的HTTPSession,都是一个继承自Task类的具体应用层对象: EasyDarwin有一个专门的网络事件处理的线程:EventThread(网络事件线程),EventThread一方面采用select(Windows)或者epoll(Linux)的网…
本文转自EasyDarwin开源团队成员ss的博客:http://blog.csdn.net/ss00_2012/article/details/52262621 RTSP认证作为RTSP标准协议的一部分,其内容在网上可以找到很多,在此就不在赘述.EasyDarwin作为RTSP服务器也提供了对RTSP请求的基本认证和摘要认证. EasyDarwin用RTSPSession对象来处理RTSP请求,在其Run函数的kAuthenticatingRequest状态和kAuthorizingReque…
--本文转自EasyDarwin开源团队成员邵帅的博客:http://blog.csdn.net/ss00_2012/article/details/51441753 我们使用EasyDarwin的推流转发来进行媒体直播的时候,有时会有这样一个需求,当推流端推送的媒体没有客户端观看时,就希望推流端不再推送,也就是实现按需推送,当推流端使用4G网络时这个需求会更加强烈. 需求明确,那么说下实现.实现分为两步:触发和通知. 触发,EasyDarwin为每一路推流转发维护一个ReflectorSess…
-本文由EasyDarwin开源团队成员Fantasy贡献 前言 最近在linux上跑EasyDarwin发现一个很奇怪的问题,当有RTSPSession连接上来的时候,发现进程的虚拟内存映射一下就多了64M,如下图: 备注:anon标识堆内存 过程 把通过在代码里面加system("pmap pid")命令,一步步跟,最终确定到是在NEW RTSPSession的时候多出来的64M内存,反复review代码,发现RTSPSession类并没有申请这么大的堆内存,把整个类大小输出,也远…
-本文由EasyDarwin开源团队成员贡献 一.问题描述 Easydarwin中大量使用gettimeofday来获取系统时间,对系统性能造成了一定的影响.我们来做个测试: While(1) { Gettimeofday(&tv,NULL); } 每秒执行次数为约3000w次: 二.我们来看看gettimeofday函数内核实现 参见:http://blog.csdn.net/russell_tao/article/details/7185588 三.my_gettimeofday()实现 s…