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

来源:互联网 发布:大数据应用案例考试 编辑:程序博客网 时间:2024/05/21 14:03

http://blog.csdn.net/xiejiashu/article/details/8739509

研究了半年多的分布式流媒体服务器得不到启用,转去开发其他新的项目,在这里做一个笔记,记录下来,以备不时之需。

      我介绍的是如何在DSS的基础上进行改造,分别开发成分布式流媒体系统中的接入管理服务与媒体分发服务。大家肯定会奇怪,DSS怎么改造成接入服务呢,其实,以DSS的架构,完全可以改造成各种类型的服务器系统,流媒体服务只是DSS的几个功能模块,闲话少说,我们直入主题:

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

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

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

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

附上整个过程的流程图: