用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了!
附上整个过程的流程图:
- 用Darwin开发分布式流媒体服务器
- 用Darwin开发分布式流媒体服务器
- 用Darwin开发分布式流媒体服务器
- 基于Darwin实现的分布式流媒体直播服务器系统
- 基于Darwin实现的分布式流媒体直播服务器系统
- 用EasyDarwin开发分布式流媒体服务器
- Darwin streaming server 流媒体服务器
- Darwin流媒体服务器的使用
- Darwin流媒体服务器裁剪优化
- Darwin流媒体服务器源码分析
- Darwin流媒体服务器代码分析
- 流媒体服务器Darwin Streamer安装配置
- Linux下Darwin流媒体服务器的安装
- windows下搭建Darwin流媒体服务器
- linux 安装流媒体服务器Darwin Streaming Server
- ubuntu安装流媒体服务器Darwin Streaming Server
- Darwin流媒体服务器在windows下搭建
- windows下搭建Darwin流媒体服务器
- 创新式开发探索(一) —— 开篇
- android编程中遇到java.net.SocketException: Permission denied 错误的原因及解决办法
- WinDbg 调试无源码驱动方法
- Linux下/proc目录简介
- QT里定时器QTimer的用法
- 用Darwin开发分布式流媒体服务器
- 黑马程序员_JavaAPI-集合框架
- ZOJ 3674 - Search in the Wiki
- C++连接MYSQL数据库
- 我在mac下使用mysql遇到的问题
- sql server 中延迟时间的方法 waitfor delay / time
- 音乐代码!
- C语言面试必须会的几个字符串操作函数原型strcpy,strcmp,strlen,strcat
- hdu 1114 Piggy-Bank