1.重识ReflectStream
ReflectStream负责rtsp中的一路流反射,负责一路流的 rtcp,rtp两种数据包的接收和发送 。
UDPSocketPair管理rtp,rtcp包数据源 :fSocketA负责接收 rtp包 ,fSocketB接收 rtcp包。
ReflectorSender负责发送数据包: fRTPSender负责发送rtp包,fRTCPSender负责发送rtcp包 。
ReflectorOutput**数组负责管理当前流对应的客户端(接收流 )列表:ReflectorSender遍历ReflectorOutput**数组依次发送数据包。
2.通过什么机制来发送数据 ?
ReflectorSocket本身是一个task,在其Run函数中用来驱动发送数据包。
ReflectorSocket在获取到数据包后,会立即调用signal方法。
在Run中,由ReflectSender调用ReflectPackets发送数据包。
ReflectSender遍历ReflectStream维护的水桶客户端,将其发送出去。实际发送数据的接口放在了水桶内部:Writepacket.
以上只是提供了 发送数据的一种驱动方式 ,但是 实际发送数据由谁负责 ,并没有 体现 。
实际发送数据的是由RTPStream来负责 。
水桶内部:Writepacket如何与 RTPStream关联呢 ?
水桶(RTPSessionOutput)内部维护了RTPSession(在setup时建立两者关联),在Writepacket中会遍历所有RTPSession中的RTPStream,由RTPStream的Write函数将数据包发送出去。