用Darwin实现流媒体转发程序(附源码)

源码下载地址:https://github.com/EasyDarwin  or www.easydarwin.org


DSS源码中已经实现了由源端主动推送视频,再将视频转发到客户端的功能,在基于DSS的先侦听后推送式流媒体转发:http://blog.csdn.net/xiejiashu/article/details/8298583中已经描述,代码可以在http://download.csdn.net/detail/xiejiashu/5007454中下载到。

那么今天我们描述一下,如何实现拉模式的转发,即转发服务器接受客户端的请求,参数携带转发的url,url可以是以查询字符串的参数形式传输过来,类似于:url=rtsp://192.168.10.8/test.mp4,转发服务器再根据转发的url,经过标准的RTSP Describe、Setup、Play、RTP流程,将视频获取到,转发给客户端列表(支持分发)。

例如,在客户端中输入:rtsp://192.168.1.10/relay.sdp?url=rtsp://114.112.51.234/abc.mp4, 即可实现对rtsp://114.112.51.234/abc.mp4的转发,其中192.168.1.10为转发服务器(也可以说是代理服务器)的地址。

设计思路:

当我们在收到一路RTSP连接请求时,在DSS中为RTSPSession类对象,首先需要解析请求头部是否为转发请求,这里我们区分转发请求与普通点播请求的方式为relay.sdp,以relay.sdp为请求媒体的名称的话,我们就判定此路客户端会话为转发请求,进而解析其请求的后续部分,进行查询字符串的解析,得到需要转发的具体url,建立一路面向url源的会话,我们称之为RTSPRelaySession,RTSPRelaySession以普通RTSP客户端的角色,连接到远程源端,并通过Describe命令,获取到sdp信息进行保存,再转发到请求Describe的客户端,而且Setup、Play分别将对应的响应码返回给客户端,在转发具体的数据时,建立一路ReflectorSession,将获取到的rtp数据转发到添加进ReflectorSession转发列表的客户端中去。

 

 ------------------------------------------------------------
本文转自www.easydarwin.org,更多开源流媒体解决方案,请关注我们的微信:EasyDarwin 

原文地址:https://www.cnblogs.com/babosa/p/9218009.html