转自:http://blog.csdn.net/u013160228/article/details/46392037

WebRTC的代码真是非常之大啊,下载以及编译了我好几天才搞完。。。。。

可以看到WebRTCd代码分成了4个部分,目前为止只看了talk里的一些东西。

1、 talk中的项目文件大多数都是以libjingle开头的,可以看出libjingle是WebRTC中非常核心的一个东西啦。

libjingle中开辟了两个通道,分别为会话通道和数据通道,一个用来会话建立管理等,一个用来传输数据。

libjingle_media是用来渲染获取视频,libjingle_p2p和libjingle_peerconnection是不同的会话方式用到的库吧,现在还没有细看

peerconnection_client和peerconnection_server则是可以直接运行的demo,设为启动项目就可以测试了,先运行server。

2、由于项目研究的是关于带宽估计的东西,所以我们看的文件主要有两个,一个是上行带宽的估计和控制,一个是下行带宽的估计和控制

上行带宽的文件在webrtc/modules/bitrate_controller,下行带宽的文件是remote_bitrate_estimator

下面讲一讲Goolge的WebRTC中自带的码率控制:

发送端发送RTP包,同时接收来自于接收端的RTCP反馈报告,整个拥塞控制算法分成了接收端和发送端两个部分。接收端的控制算法是基于时延的算法,其目的是减小时延;发送端的控制算法是基于丢包率的算法,其目的是减少丢包。接收端的算法计算出一个速率Ar,然后将这个码率反馈给发送端,用来限制发送端基于丢包率算法计算出来的发送速率。

发送端基于丢包率的控制方法在每一个tk时刻或者tr时刻启动。tk表示第k个RTCP反馈报告的到达时间,tr表示第r个REMB信息到达发送端的时间,其中REMB信息中包含接收端反馈的Ar信息。RTCP包内包含丢包率fl(tk),发送端根据丢包率计算接下来的发送速率,具体计算方式图公式1所示:

接收端速率控制:

接收端算法的目的就是计算出能保证低时延情况下的接收速率Ar,Ar的计算过程如图2所示:

下面介绍接收端也就是remote_bitrate_estimator中的几个模块算法

1) The arrival-time filter

该模块的目的是为了计算排队时延m(ti),单向时延(one way delay variation)计算方式如下:dm(ti)= ti–ti-1–(Ti –Ti-1 )                                (3)

式中,Ti表示第i帧视频发送的时间戳,ti 表示第i个视频帧接收到的时间戳。单向时延是三个部分的总和,包括传输时间、排队时延m(ti)、网络抖动n(ti)。GCC算法中提出了下面这个公式:

式中,∆L(ti) = L(ti−L(ti−1),L(ti)是第i个视频帧的长度,C(ti)是瓶颈链路容量估计,n(ti)是网络抖动(高斯噪声模型)。为了将dm(ti− d(ti)的差值缩小到趋于零,用卡尔曼滤波器提取出状态向量,具体工作方式如图3所示:

The over-use detector

每帧视频收到的时刻,即ti时刻,该模块都会产生一个s信号以驱动下一个码率控制模块。当m(ti)大于阀值γ,信号为overuse;当m(ti)小于阀值γ,信号为underuse。

Remote rate controller

该模块的目的是为了估算数接收速率Ar,其算法流程如图2所示,由信号s决定码率的调整,η ∈[1.005,1.3],α ∈[0.8,0.95]分别为增性系数和碱性系数。

上调:Ar(ti)= ηAr(ti−1)

下调:Ar(ti)= αR(ti),其中R(ti)是最近500ms内的平均接收速率。

REMB Processing

该模块的功能是将上一个模块计算出的速率Ar通过REMB信息发给客户端。REMB信息发送间隔为1s,但当Ar下降了3%,即Ar(ti) < 0.97Ar(ti−1)时,则立即发送REMB信息以调整码率。

WebRTC之带宽控制部分学习(1) ------基本demo的介绍的更多相关文章

  1. 20个令人惊叹的深度学习应用(Demo+Paper+Code)

    20个令人惊叹的深度学习应用(Demo+Paper+Code) 从计算机视觉到自然语言处理,在过去的几年里,深度学习技术被应用到了数以百计的实际问题中.诸多案例也已经证明,深度学习能让工作比之前做得更 ...

  2. opencv3.1自带demo的介绍和运行操作。转载

    opencv3.1自带demo的介绍和运行操作. 下列实验基本都试过,有些需要根据自己的电脑修改一些路径或者调试参数. 值得注意的是,控制台程序输入有时候要在图像所在的窗口输入相应的指令.我的电脑上安 ...

  3. (zhuan) 深度学习全网最全学习资料汇总之模型介绍篇

    This blog from : http://weibo.com/ttarticle/p/show?id=2309351000224077630868614681&u=5070353058& ...

  4. 《从0到1学习Flink》—— Data Sink 介绍

    前言 再上一篇文章中 <从0到1学习Flink>-- Data Source 介绍 讲解了 Flink Data Source ,那么这里就来讲讲 Flink Data Sink 吧. 首 ...

  5. Magento学习第一课——目录结构介绍

    Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...

  6. Docker学习总结之Run命令介绍

    Docker学习总结之Run命令介绍 本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢! 在使用Docker时,执行最多的命令某 ...

  7. [转]ZooKeeper学习第一期---Zookeeper简单介绍

    ZooKeeper学习第一期---Zookeeper简单介绍 http://www.cnblogs.com/sunddenly/p/4033574.html 一.分布式协调技术 在给大家介绍ZooKe ...

  8. 《从0到1学习Flink》—— Apache Flink 介绍

    前言 Flink 是一种流式计算框架,为什么我会接触到 Flink 呢?因为我目前在负责的是监控平台的告警部分,负责采集到的监控数据会直接往 kafka 里塞,然后告警这边需要从 kafka topi ...

  9. 《从0到1学习Flink》—— Data Source 介绍

    前言 Data Sources 是什么呢?就字面意思其实就可以知道:数据来源. Flink 做为一款流式计算框架,它可用来做批处理,即处理静态的数据集.历史的数据集:也可以用来做流处理,即实时的处理些 ...

随机推荐

  1. 在Navicat for MySQL中打开视图时,提示视图没有主键的问题

    一直把视图理解为一个select语句而已,视图一般就是用于查询,不会通过视图来更新表或视图本身的数据,所以视图根本不需要什么主键.今天自己建了一个视图view_test: drop view if e ...

  2. sharepoint2013隐藏左侧导航栏更换新的

    $("#zz16_V4QuickLaunchMenu").hide()//隐藏 更换新的 <script type="text/javascript" s ...

  3. Debian上安装Apache+Django全过程

    -->start sudo apt-get install apache2 libapache2-mod-wsgi #https://wiki.debian.org/zh_CN/Apache s ...

  4. ACM/ICPC 之 SPFA练习两道(ZOJ3088-ZOJ3103)

    两道题都需要进行双向SPFA,比范例复杂,代码也较长,其中第二题应该可以用DFS或者BFS做,如果用DFS可能需要的剪枝较多. ZOJ3088-Easter Holydays //利用SPFA找出下降 ...

  5. vmstat uptime 系统状态脚本

    #!/bin/bash # # Command :vmstat,uptime #Capture_Stats - Gather System Performance Statistics ####### ...

  6. codeforces 492C. Vanya and Exams 解题报告

    题目链接:http://codeforces.com/problemset/problem/492/C 题目意思:给出 3 个整数:n,  r,  avg.然后有 n 行,每行有两个数:第 i 行有 ...

  7. 用原生DOM 遍历页面节点

    代码丢失,直接上图:

  8. Mysql 基础2

    创建数据库:     create  database/*条件*/+ text3/*数据库名称*/ 创建数据库  步骤:查询   创建查询  查询编辑器 (写代码) 删除数据库: drop datab ...

  9. 20145213《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDEA)

    20145213<Java程序设计>实验报告一:Java开发环境的熟悉(Windows+IDEA) 实验要求 使用JDK编译.运行简单的Java程序. 使用IDEA编辑.编译.运行.调试J ...

  10. 使用a标签删除进行提示

    一句话搞定: <a href="Login.aspx" target="mainFrame" class="STYLE4" oncli ...