用Darwin开发分布式流媒体服务器

摘要:
我介绍的是如何在DSS的基础上进行改造,分别开发成为分布式流媒体系统中的设备接入服务与流媒体分发服务。

我介绍的是如何在DSS的基础上进行改造,分别开发成为分布式流媒体系统中的设备接入服务(设备主动注册上线)与流媒体分发服务。大家肯定会奇怪,DSS怎么改造成设备接入服务呢,其实,以DSS的架构,完全可以改造成大部分类型的服务器系统,而且流媒体服务只是DSS的几个功能模块,其强大之处在于其整体框架与架构设计上,闲话少说,让我们直入主题:

设备接入服务:在大部分的分布式服务器中,接入服务器常常属于被动接入形式,当然也有接入服务器主动接入配置的前端设备,这里我们按照接入服务器被动接收设备注册的方式介绍。按照被动的设备注册方式,设备在接入到服务器后,会与接入服务器建立一个交互的会话,以TCP方式进行连接并发送保活包,那么我们可以在原有DSS的RTSPSession基础上进行改造,改成属于自定义协议的交互流程,底层的网络读取与发送结构完全一致,只需要修改上层对收到的报文的处理,那么对于多路会话的维护也可以直接用原来对RTPSession列表的维护方式,改写Hash表fMySessionMap,用GetMySessionMap()从服务器主体获取,Hash表的主键可以按照自定义协议里的唯一标识进行,如前端设备的ID、ip等等。自定义协议部分就只需要参考DSS对RTSP的处理,改成自己的协议处理(文本协议、字节流协议)就搞定了!

视频分发服务:分发服务器的修改就方便了,如果还是按照RTSP的方式进行流媒体发布,那基本就不需要修改了,直接用DSS在QTSSReflectorModule中已经有的被动接收推送的方式进行转发就可以了,设备在收到接入服务的媒体开始命令后,立即推送视频到DSS分发服务,通过DSS已有的RTSP Announce、Setup、Play、RTP流程推送媒体数据,DSS再将媒体数据分发到客户端列表中(具体流程参见:http://blog.csdn.net/xiejiashu/article/details/8298583)!

设备端:如果设备协议也是自己定义的,那也方便了,我们用live555嵌入到设备(如IpC,硬盘录像机等)中,在live555中先定义一个RTSPClient,连接保活到接入服务,通过此条连接与接入服务始终保持通信,那么接入服务通过此条tcp发出开始视频的命令时,live555再开启另一条RTSPClient,通过live555已有的DarwinInjector类,经过RTSP Announce、Setup、Play、RTP过程,将流注入到DSS中,在接入发出停止命令时,终止DarwinInjector的流注入,发出RTSP Teardown到DSS,停止媒体传输!

客户端:标准RTSP流程,不需要修改,客户端先请求到接入服务,接入服务发出RTSP 重定向的响应到客户端,重定向地址为分发服务的地址,客户端再转而去请求分发服务,这时候,分发服务已经获取到了设备推送来的媒体流,转发给客户端,整个流程就ok了!

附上整个过程的流程图:

用Darwin开发分布式流媒体服务器第1张

整个流程可以按照自己的需求进行修改,如:客户端请求到接入服务器后,接入服务器可以只判断请求的设备是否在线,如果不在线,返回404,如果在线,直接返回301,重定向到的分布式服务器,分布式服务器再通过与接入服务器的交互,通过接入服务器的信令通路控制设备发起视频,设备再成功发起视频后,再返回到分发服务器,成功回到客户端,如此,整个流程通过!

------------------------------------------------------------
本文转自www.easydarwin.org,更多开源流媒体解决方案,请关注我们的微信:EasyDarwin
用Darwin开发分布式流媒体服务器第2张

免责声明:文章转载自《用Darwin开发分布式流媒体服务器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇font-spider问题【已解决】如何使用Xmanager及VNC登录远程桌面下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

开发ffmpeg/live555常见问题错误及解决方法

#include <iostream>using namespace std;extern "C" {#include <libavcodec/avcodec.h> // required headers#include <libavformat/avformat.h>}int main(int argc, cha...

PHP如何打造一个高可用高性能的网站呢?

https://blog.csdn.net/jwq101666/article/details/80162245 1. 说到高可用的话要提一下redis,用过的都知道redis是一个具备数据库特征的nosql,正好弥补了PHP的瓶颈,个人认为PHP的 瓶颈在于数据库,像Apache和Nginx的高级web服务器在承受并发量上面都各有千秋,apache的最大...

各种流媒体服务器性能测试

  今天正好有80Gbps的万兆网络环境,写了一个压力测试工具,对比了一下各种流媒体服务器,在超级并发下的性能如何,原来听说intel的万兆网卡有问题,只能跑到不到的理论带宽,这点我测试过了,用intel最新的驱动,centos6,最次能跑到80%的理论带宽,最高能跑到95%以上,完全没有问题,需要注意的是nginx 采用异步架构,因为rtmp协议实际上损...

阿里云常用产品汇总及解释-copy

1. 场景描述 最近博客更新的少,跟朋友一起做些事情,最近主要给朋友做些售前工作,阿里云的产品线是真多,好多英文缩写,需要做沟通,系统汇总了一下,记录下,有需要的朋友拿走不谢。 2. 解决方案 从下面这个架构图开始吧: 2.1 云数据库 RDS 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的...

Kafka — 高吞吐量的分布式发布订阅消息系统【转】

1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic、发送消息、消费消息?3.如何书写Kafka程序?4.数据传输的事务定义有哪三种?5.Kafka判断一个节点是否活着有哪两个条件?6.producer是否直接将数据发送到broker的leader(主节点)?7.Kafa consumer是否可以消费指定分区消息?8.Kafka消息是采...

还不理解“分布式事务”?这篇给你讲清楚!

“这篇文章将介绍什么是分布式事务,分布式事务解决什么问题,对分布式事务实现的难点,解决思路,不同场景下方案的选择,通过图解的方式进行梳理、总结和比较。 相信耐心看完这篇文章,谈到分布式事务,不再只是有“2PC”、“3PC”、“MQ的消息事务”、“最终一致性”、“TCC”等这些知识碎片,而是能够将知识连成一片,形成知识体系。 什么是事务 介绍分布式事务...