转自: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. 使用Django——安装

    1. 安装 a) 安装python 在http://www.python.org/上下载python 2.7,然后安装,接着将python的安装路径(一般是C:\python27)添加到windows ...

  2. iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem

    http://blog.csdn.net/totogo2010/article/details/7681879 1.UINavigationController导航控制器如何使用 UINavigati ...

  3. PHP: How to print a debug log?

    file_put_contents('php://stderr', print_r("hello ", TRUE)); 转自: http://stackoverflow.com/q ...

  4. 一步步教你Hadoop多节点集群安装配置

    1.集群部署介绍 1.1 Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台.以Hadoop分布式文件系统HDFS(Hadoop Distributed Filesys ...

  5. C++实现VPN工具之常用API函数

    RAS是Remote Access Service的缩写,意为:远程访问服务,主要用来配置企业的远程用户对企业内部网络访问,包括拨号访问和vpn方式.微软的所有Windows平台中都有RAS客户机,它 ...

  6. 终端ssh登录mac用shell打包ipa报错:replacing existing signature

    终端ssh登录mac用shell打包ipa报错:replacing existing signature 报错原因:login.keychain被锁定,ssh登录的没有访问权限 解决方法:终端敲入 s ...

  7. ios 把已经点击过的UILocalNotification 从系统的通知中心现实中移除

    在ios7 上一个uilocalnotification在中心现实后,点击该消息,程序被唤醒了,但是该通知没有被移除.用了以下的代码后可以解决这个问题         UIApplication.sh ...

  8. nyoj123_士兵杀敌(四)_树状数组_插线求点

    士兵杀敌(四) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5   描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战 ...

  9. 打包文件 MANIFEST.MF 功能详解

    最近研究了如何在java工程打包,期间遇到的一些问题进行总结,如打包成test.jar 文件 Manifest-Version: 1.0 Main-Class: windows.VideoWindow ...

  10. 【leetcode】Restore IP Addresses (middle)

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...