darwin之发送数据流(ReflectorSession)


1.darwin如何管理推送的rtsp流?
rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream
ReflectorSession与av_stream相关联 ,通过OSRefTable*sSessionMap来管理(key:av_stream,value:ReflectorSession)


2.ReflectorSession内部如何维护rtsp流呢 ?

在其类内部维护了数组:ReflectorStream,每一个ReflectorStream代表一路流
比如一个rtsp流有音视频两路流,则需要创建两个ReflectorStream来分别管理音视频流。


3.ReflectorSession最终的目的是将流发送给所有的客户端,如何实现的?

在每一个ReflectorStream中维护了一个二维数组,数组的每一个元素代表一个rtp客户端。当有rtsp流推送到服务器上时,
会根据av_stream找到对应的ReflectStream。不断的将该流推送给所有的rtp客户端(当有客户端请求相同的av_stream时).


4.ReflectorSession何时创建?

客户端推流时:在DoSetup函数中创建

客户端取流时:在DoDescribe函数中创建

针对推模式,推流客户端推送url为*.sdp流与接流客户端接收的URL一样。因为ReflectorSession与url地址一一对应,因此DoSessionSetup内部只创建一次ReflectorSession。对模式中,ReflectorSession创建是在Dosetup中由推流客户端发送setup请求时在DoSessionSetup中创建,其余的地方调用DoSessionSetup只是引用之前创建好的ReflectorSession。





5.ReflectorSession如何与rtp客户端关联?

所有的客户端都是接受rtp流,而rtsp协议只是为了接收rtp流做铺垫。

当一个rtsp客户端连接请求流时,darwin会新分配一个RTSPSession与之通信。在RTSPSession内部(SetupRequest时)会创建RTPSession,将并所有参数一并传到QTSSReflectorModule模块去处理。

QTSSReflectorModule模块的DoSetup函数中,将ReflectorSession与RTPSessionOutput关联。


在RTSPSession调用QTSSReflectorModule模块时,一并将 QTSS_StandardRTSP_Params参数(rtsp,rtp客户端,rtsp协议包内容)传进去。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunxiaopengsun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值