Closed shentu521 closed 5 years ago
还有就是关于丢包重传模块,当我们接收端判断出了丢包后,最近要到下一个RTT周期后才去发送重传的请求,这个由是为什么呢?
还有就是关于丢包重传模块,当我们接收端判断出了丢包后,最近要到下一个RTT周期后才去发送重传的请求,这个由是为什么呢?
哦,这个原因我知道了:
假设一个周期内我发送了5,6,7三个包,但是我只接收了到了7,这个时候和缓冲区中最大max_seq比较,我第一步判断出,是少了5,6号包.
因为我们检测出发送是一个数据包往返的时间是RTT,这个时候,其实这个时候人如果过了 (RTT + RTT_VAR)/2 后我们还没有收到这个包,那么基本就可以判断出这个包已经丢了.
OK
`static void real_video_evict_frame(sim_session_t s, sim_frame_cache_t c, uint32_t fid) { uint32_t pos, i;
}`
当清除过期的槽位的时候,思路卡主了,
当我们缓存的帧数据超过了数组的大小后,此时需要先清除以前缓存的数据,然后在存储新的数据.
但是有2个地方我始终没有想明白:
后面的代码: 清除的以前的数据,就作为了最小的min_fid,但是后面紧接着就把这个min_fid开始的一个GOP给清空了?请问这样做有什么单独的目的吗?
还有:
if (fid < c->min_fid + c->size) //新进来的元素已经跨越了一个缓冲区的长度 return;
上面这样代码:
如果缓冲区的长度 < cache size,那么很容易理解.
但是如果超过了cache size 后,这行代码的意义,好像就有点多余.
因为超过cache size后:
fid = c->min_fid + c->size ;