EasyDarwin开源流媒体服务器(www.easydarwin.org),拉转推是一个很有意义的功能,它可将一个独立的RTSP数据源“拉”到服务器,再通过转发协议转发给多个客户端,或者通过EasyDarwin的本地存储功能进行存储。国内大多摄像机都支持RTSP协议,通过拉转推可将第三方摄像机接入到EasyDarwin服务器。
拉转推需要服务器不仅实现服务端,还要实现客户端。这里我们介绍下拉流功能的实现。
RTSP的客户端拉流流程为:
- 发送RTSP命令
- 接收RTP媒体流
发送RTSP命令,又有如下几步:
- OPTIONS 获取Server端支持的REQUEST请求集合
- DESCRIBE 获取码流的SDP
- SETUP 根据SDP信息,配置单个媒体流的传输方式
- PLAY 启动播放
rtsp-client.goRTSPClientStartStop
requestStreamstreamrequestStream
go-sdpSETUPPLAYrequestStreamstreamstream
Content-LengthContent-Length
接收到的RTP数据包,我们在这里仅仅将其回调给上层处理。上层要维护一个队列,并将RTP数据包入队了。当有Client连接时,从队列里面去除RTP包,分发给Client,便实现了拉流转发功能。
资源链接
EasyDarwin官网:www.easydarwin.org
EasyDarwin Github:https://github.com/easydarwin