反射模块理解

1.缓冲区时间(reflector_buffer_size_sec):存储一定时间的数据包
2.sBucketSize 每一组水桶的个数,默认16:代表直播客户端的输出被一组一组地管理成二维形式,表示每一组的大小
3.fNumBuckets 多少组水桶 默认16组
4.每一组的缓冲区偏移时间 单位 (sBucketDelayInMsec,默认73ms):第一组0ms,第二组:73*1ms 第三组:73*2ms
5.bucketDelay: 这个延迟时间是这样管理的:代表直播客户端的输出被一组一组地管理成二维形式,而不是线性的一维形式。
  根据这个二维形式,一个组对应一个延迟时间,越在后面的组,延迟的时间越长。
  最终会遍历整个水桶集,每一组水桶的延迟时间都不一样。SInt64  bucketDelay = ReflectorStream::sBucketDelayInMsec * (SInt64)bucketIndex;
6.sFirstPacketOffsetMsec:新的客户端的第一帧从哪里开始接收。表示在缓冲区中的偏移量,比如缓冲区为1000ms,偏移量sFirstPacketOffsetMsec为200ms,则首帧将从<=1000-200的位置开始接受。
7.sMaxPacketAgeMSec:每一个包能活的最长时间,如果超过这个时间,就会被删除掉,默认是10s钟。
8.thePacket->fTimeArrived:包的到达时间,服务器收到此包的时间。用当前时间减去thePacket->fTimeArrived就表示活了多少时间。
9.thePacket.packetTransmitTime:是包的实际发送时间,其生成规则为:(到达时间+总缓冲时间)-延迟时间(*arrivalTimeMSecPtr + fBufferDelayMSecs - packetLatenessInMSec)




10.书签
theOutput->GetBookMarkedPacket(&fPacketQueue); ReflectorOutput类的成员,针对每一个发送客户端都维护了一个。标定上次发送的位置(发送缓冲区fPacketQueue队列中的位置),本次接着这个位置继续发送。
packetElem = this->SendPacketsToOutput(theOutput, packetElem,currentTime, bucketDelay);//尽可能的将fPacketQueue中所有的数据都发送出去
(void) theOutput->SetBookMarkPacket(packetElem); // 记住本次发送的位置,以便下次发送时从该位置发送


10.ReflectorSender的缓冲区机制
ReflectorSocket在收到数据后,首先会从inFreeQueue申请一个包的空间,如果没有,则new一个包然后存放到fPacketQueue中。
当该包发送给了客户端之后(不再使用并且已经超过了sMaxPacketAgeMSec时间)则会被删除,然后再次放到inFreeQueue中,这样就可以循环利用,避免频繁分配释放内存,只有当ReflectorSender不在使用后,才会将整个内存收回 
发送缓冲区:fPacketQueue
空闲缓冲区:inFreeQueue
        if ( !thePacket->fNeededByOutput && packetDelay > currentMaxPacketDelay) // delete based on late tolerance and whether a client is blocked on the packet
 
       {  
          // not needed and older than our required buffer
       
          thePacket->Reset();
        
          fPacketQueue.Remove( elem );
   
          inFreeQueue->EnQueue( elem );
 
       }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

sunxiaopengsun

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

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

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

打赏作者

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

抵扣说明:

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

余额充值