- 博客(32)
- 收藏
- 关注
原创 Webrtc delay-base-bwe代码分析(5): AimdRateControl模块
@(webrtc)[webrtc, congestion control]Webrtc delay-base-bwe代码分析(5): AimdRateControl模块0. 简介这个模块是根据OveruseDetector模块计算出来的状态来维护码率控制模块的自动状态机,并更新估算出来的对端发送速率,提供给REMB进行反馈。1. 原理一共维持三个状态,增长、保持、衰减,状态转换根据OveruseDe
2017-05-22 19:44:11
2280
原创 Webrtc delay-base-bwe代码分析(4): OveruseDetector模块
@(webrtc)[webrtc, congestion control]Webrtc delay-base-bwe代码分析(4): OveruseDetector模块0. 简介这个模块主要是根据OveruseEstimator模块校正后的到达时间差来对链路使用状态进行评估,为有限自动状态机提供状态转换的条件,同时本模块还有GCC文档中提到的自适应阈值计算。阈值自适应原因如下: 个人理解: -
2017-05-22 19:35:49
1653
原创 Webrtc delay-base-bwe代码分析(3): OveruseEstimator模块
@(webrtc)[webrtc, congestion control]Webrtc delay-base-bwe代码分析(3): OveruseEstimator模块该模块是一个卡尔曼滤波,根据当前到达时间差和传输大小的值,对到达时间差进行滤波,计算更精准的到达时间差。0. 卡尔曼滤波基础公式从参考文档中获得基础公式及对应变量意义。公式: 变量:1. OveruseEstimator的卡尔曼滤
2017-05-22 19:32:48
2291
原创 Webrtc delay-base-bwe代码分析(2): InterArrival模块
@(webrtc)[webrtc, congestion control]Webrtc delay-base-bwe代码分析(2): InterArrival模块0. 参考文档[1] google congestion control [2] Rtp payload format for h2641. 功能该模块主要对到达的时间进行小范围内的统计、采样,并根据一定的时间间隔计算出对应的延迟、传输大
2017-05-22 19:30:18
1915
原创 Webrtc delay-base-bwe代码分析(1): RateStatistics模块
@(webrtc)[webrtc, congestion control]Webrtc delay-base-bwe代码分析(1): RateStatistics模块RateStatistics这个类的作用为记录一个时间窗口内的速率值,并返回当前时间区域内的码率值。单独开一个文章主要是用来描述其用来记录速率值的桶,一开始看的比较迷糊。class RateStatistics { // Count
2017-05-22 19:22:43
1813
原创 TCP的FRTO理解
TCP的FRTO理解本文主要描述内核4.9.4中的TCP丢包处理与frto相关的操作,主要覆盖使用sack的场景。0. 参考文档[1] RFC-5682 [2] linuxtcp.ps [3] frto.pdf1. FRTO要解决的问题FRTO主要是用来处理在DSACK生效时,突发的延迟触发RTO超时后,不必要的延迟和重传报文的ack造成了DSACK而产生非必要的快速重传[1]。 传统的基于D
2017-04-11 19:12:30
2642
2
原创 QUIC中文翻译
翻译地址距离上次完整翻译一篇文章已经好几年了,那还是本科毕设用的文章翻译,那时候还能用谷歌翻译,现在也又能了……….整体翻译因个人水平有限比较僵硬词汇量还是太差。。对于翻译,并不用把每句话都翻译出来,整段话意思一致就可以了。对于某些名词,也不需要完完全全翻译。顺便庆祝IG获得DAC冠军
2017-04-05 16:09:37
1303
原创 linux内核TCP拥塞控制两个速率增长阶段代码分析
TCP拥塞控制两个速率增长阶段分析0. 参考文档[1] rfc-5681 [2] tcp-abc-rfc [3] rfc-3465 [4] rfc-37421. 拥塞控制个人理解1.1 慢启动与拥塞避免慢启动和拥塞避免,主要是用于拥塞控制中拥塞窗口增长的维护。根据阈值,拥塞控制其实分为两部分,小于阈值的慢启动阶段,大于阈值进入拥塞避免阶段。慢启动作为拥塞控制的一部分,我觉得其名字取的比较具有混
2017-04-01 11:00:28
1648
原创 从janus中学习webrtc的ice简单交换过程
本文通过web和janus进行实时音视频通信的Demo,结合rfc-5245来学习webrtc中ice交换的过程。
2017-02-21 14:54:33
12451
原创 Glib内存管理模块之magazine layer
Glib中使用了slab进行内存管理,同时引入了magazine cache来进行多级缓存。本文主要介绍magazine cache部分实现。
2016-12-01 15:09:31
1982
原创 state-threads的协程切换
state-threads是一个C语言实现的轻量级协程库,基于setjmp和longjmp来对不同协程进行切换。本文将先分析其保存上下文的setjmp和longjmp的汇编代码,简单分析其上下文切换的过程。
2016-11-10 11:58:50
1681
原创 gstreamer的collectpad源码分析
gstreamer的collectpad是一类特殊的pad,这类pad工作于收集模式,用于管理控制若干个pad组成的pad集合的数据同步处理。大部分的合成器(muxer)均使用collectpad来收集音视频数据,并根据可重载的收集条件判断函数对不同pad之间的数据进行处理(或同步)。 由于collectpad中大部分处理函数均可重载(set_func),因此本文只讨论默认的处理函数。
2016-11-08 10:16:40
4267
原创 gstreamer中rtpjitterbuffer的定时器线程及重传请求代码分析
本文主要描述gstreamer中rtpjitterbuffer的定时器线程的处理流程
2016-10-12 23:26:13
3715
2
原创 gstreamer中的rtpjitterbuffer代码分析:推送线程
本文主要分析gstreamer中的rtpjitterbuffer中推送数据线程的代码。
2016-10-09 22:20:56
3206
原创 gstreamer中的rtpjitterbuffer
本文主要介绍了gstreamer中的rtpjitterbuffer功能、简要处理流程及一些参数。
2016-10-09 22:20:28
3758
原创 内核listen的backlog和简单的三次握手分析
前面通过抓包分析了listen backlog对全连接和半连接的影响,本文将从内核源码上简单了解下三次握手的过程以及backlog在中间所起的作用。
2016-05-04 23:22:02
6493
原创 [源码]SQUID的简单内存调试方法
SQUID自身使用了一种简单的内存调试方式,可以在程序运行的时候对内存的使用情况进行监控调试(指开发层面的监控,如泄漏,内存合法性,不是运维层面的内存监控)。本文简单介绍其内部实现。不过对于其内存泄漏检查的部分代码仍有疑惑。
2016-04-09 15:01:42
1036
原创 UDP的connect
一、 简介:UDP是无连接的协议,不需要connect可以直接使用sendto/sendmsg等携带对端信息的函数对数据进行发送接收,但是其实UDP的socket也是可以进行connect的。connect完的socket和未connect的socket有如下区别:[1]1. 可以使用不指定目的信息的接收发送函数,如read/write2. 由已连接UDP套接字引发的异步错误会返回
2016-02-28 12:08:30
1436
转载 Mac下的VI bundle配置
最早查看的文章来自http://www.jianshu.com/p/95d8335aeac7,但是根据其步骤发现安装和使用过程中总有部分问题,现总结如下:问题1:Unknown function: vundle##rc解决:将vundle##rc()修改为vundle#begin(),同时下载bundle项目到本地sudo git clone https://github.com/gm
2016-01-23 17:54:41
3173
原创 并发程序的乱序之一:编译器指令重排
并发执行的程序存在三种场景的乱序,编译器对指令重排导致变量之间的隐式逻辑打乱,多线程的内核调度,多核之间的cache一致性。
2016-01-11 14:13:18
3887
原创 C++11的future和promise及active object并发模式
《C++并发编程实战》中提到了C++11中的future,网上查找一些资料大都只说了使用,并没有详细介绍future。本文简单介绍了我对future的理解
2016-01-07 10:46:19
3602
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人