WebRTC 用例和性能

实现低延迟、点对点传输是一项艰巨的工程挑战:有 NAT 遍历和连接检查、信令、安全、拥塞控制和无数其他细节需要处理。WebRTC 代表我们处理以上所有内容,这就是为什么它可以说是自网络平台成立以来最重要的补充之一。事实上,这不仅仅是 WebRTC 提供的单个部分,而是所有组件协同工作以提供用于在浏览器中构建点对点应用程序的简单统一的 API。

然而,即使有所有内置服务,设计高效和高性能的点对点应用程序仍然需要大量仔细的思考和规划:点对点本身并不意味着高性能。如果有的话,对等点之间带宽和延迟的增加的可变性,媒体传输的高要求,以及不可靠交付的特性,使其成为一项更加艰巨的工程挑战。

音频、视频和数据流

点对点音频和视频流是 WebRTC 的核心用例之一:getUserMediaAPI 使应用程序能够获取媒体流,内置的音频和视频引擎处理流之间的优化、错误恢复和同步。然而,重要的是要记住,即使采用积极的优化和压缩,音频和视频传输仍然可能受到延迟和带宽的限制:

好消息是全球的平均带宽容量正在持续增长:用户正在转向宽带,5G 的采用率正在上升。然而,即使有乐观的增长预测,虽然高清流媒体现在变得可行,但这并不能保证!同样,延迟是一个长期存在的问题,尤其是对于实时交付,对于移动客户端而言更是如此。5G 肯定会有所帮助,但 4G 网络也不会很快消失。

更复杂的是,大多数 ISP 和移动运营商提供的连接不是对称的:大多数用户的下行链路吞吐量明显高于上行链路吞吐量。事实上,10 对 1 的关系并不少见——例如,下行 10 Mbps,上行 1 Mbps。

最终结果是,当您看到单个点对点音频和视频流占用大量用户带宽时,您应该不会感到惊讶,尤其是对于移动客户端。考虑提供多方流?您可能需要对可用带宽量进行一些仔细规划:

  • 移动客户端可能能够下载高清质量的流(1 Mbps+),但由于上行链路吞吐量较低,可能需要发送质量较低的流;不同的参与方可以以不同的比特率进行流式传输。
  • 音频和视频流可能需要与其他应用程序和数据传输共享带宽——例如,一个或多个 DataChannel 会话。
  • 无论连接类型是有线还是无线,或者网络的生成方式如何,带宽和延迟总是在变化,应用程序必须能够适应这些条件。

好消息是,WebRTC 音频和视频引擎与底层网络传输一起工作,以探测可用带宽并优化媒体流的交付。但是,DataChannel 传输需要额外的应用程序逻辑:应用程序必须监控缓冲数据量并准备好根据需要进行调整。

多方架构

具有双向高清媒体流的单个点对点连接很容易占用用户带宽的很大一部分。因此,多方应用程序应该仔细考虑如何在对等方之间聚合和分发各个流的架构。、

一对一连接易于管理和部署:对等方直接相互交谈,无需进一步优化。但是,将相同的策略扩展到 N 路调用,其中每个对等方负责连接到所有其他方(网状网络),这将导致N-1每个对等方的N X (N-1)连接,以及连接总数!如果带宽非常宝贵,通常是由于上行链路速度低得多,那么这种类型的架构将很快使大多数用户的链接饱和,而只有少数参与者。

虽然网状网络易于设置,但对于多方系统而言,它们通常效率低下。为了解决这个问题,另一种策略是使用“星形”拓扑,其中各个对等点连接到“超级节点”,然后负责将流分发给所有连接方。这样,只有一个对等点必须支付处理和分发N-1流的成本,其他所有人都直接与超级节点对话。

一个超级节点可以是另一个对等节点,也可以是专门为处理和分发实时数据而优化的专用服务;哪种策略更合适取决于上下文和应用。在最简单的情况下,发起者可以充当超级节点——很简单,它可能会正常工作。更好的策略可能是选择具有最佳可用吞吐量的对等方,但这也需要额外的“选举”和信令机制。

WebRTC 用例和性能的更多相关文章

  1. 第一次个人项目【词频统计】——测试样例分析&性能分析

    [空文件测试](认为空文件行数为0) [基本测试] [大小写测试] 可以看出abcd同类型的词出现了三次,而单词树中存储的是ABCd,满足大小写要求. [复杂文件测试] 前三项数据比较接近,但是单词和 ...

  2. webRTC的标准与发展

    Web实时通信(WebRTC)是标准,协议和JavaScript API的集合,两者的组合可实现浏览器(对等)之间的对等音频,视频和数据共享.WebRTC无需依赖第三方插件或专有软件,而是将实时通信转 ...

  3. (译)WebRTC实战: STUN, TURN, Signaling

    http://xiaol.me/2014/08/24/webrtc-stun-turn-signaling/ 原文:WebRTC in the real world: STUN, TURN and s ...

  4. Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键?

    本文主要介绍WebRTC端到端监控(我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信I ...

  5. Nginx 引入线程池,提升 9 倍性能

    转载:http://blog.csdn.net/wuliusir/article/details/50760357 众所周知,NGINX 采用异步.事件驱动的方式处理连接.意味着无需对每个请求创建专门 ...

  6. C++ 性能剖析 (一)

    C++ 性能剖析 (一) 性能问题也不是仅仅用“技术”可以解决的,它往往是架构,测试,假设等综合难题.不过,对于一个工程师来说,必须从小做起,把一些“明显”的小问题解决.否则的话积小成多,千里堤坝,溃 ...

  7. iOS 中的单例设计模式

    单例设计模式:在它的核心结构中只包含一个被称为单例类的特殊类.例如文件管理中的NSUserDefault,应用程序中的UIApplication,整个应用程序就这一个单例类,负责应用程序的一些操作,单 ...

  8. 《Web性能权威指南》

    <Web性能权威指南> 基本信息 原书名:High performance browser networking 原出版社: O'Reilly Media 作者: (加)Ilya Grig ...

  9. Web性能权威指南 PDF扫描版​

    Web性能权威指南是谷歌公司高性能团队核心成员的权威之作,堪称实战经验与规范解读完美结合的产物.<Web性能权威指南>目标是涵盖Web开发者技术体系中应该掌握的所有网络及性能优化知识.全书 ...

随机推荐

  1. WEB 三维引擎在高精地图数据生产的探索和实践

    1. 前言 高精地图(High Definition Map)作为自动驾驶安全性不可或缺的一部分,能有效强化自动驾驶的感知能力和决策能力,提升自动驾驶的等级.对于自动驾驶来说,高精地图主要是给机器用的 ...

  2. USB上位机通信:CyAPI

    至今的工作中,有USB接口通信的需求,记录一下. 建立一个USB设备对象 CCyUSBDevice *USBDevice = new CCyUSBDev(Handle): 打开USB设备 一个USB设 ...

  3. 7.4、Horizon部署

    1.horizon介绍: horizon只需要连上keystone即可: 这里在控制节点controller进行操作: 提示:horizon和keystone运行时使用的都是apache软件,如果都装 ...

  4. AcWing 243. 一个简单的整数问题2

    给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一: 1."C l r d",表示把 A[l],A[l+1],-,A[r] 都加上 d. 2."Q l r ...

  5. CentOS-磁盘扩容挂载目录

    挂载 查看存储情况 $ df -kh 查看磁盘情况 $ fdisk -l fdisk创建分区(注:可操作存储上限为2TB)$ fdisk /dev/sdb根据提示,依次输入"n", ...

  6. gitlab hostname修改

    cd /var/opt/gitlab/gitlab-rails/etc vim gitlab.yml /home/git/gitlab/config/gitlab.yml production: &a ...

  7. pybot参数

    p.p1 { margin: 0; font: 12px "Helvetica Neue" } p.p2 { margin: 0; font: 12px "Helveti ...

  8. 深入理解Java容器——HashMap

    目录 存储结构 初始化 put resize 树化 get 为什么equals和hashCode要同时重写? 为何HashMap的数组长度一定是2的次幂? 线程安全 参考 存储结构 JDK1.8前是数 ...

  9. 【Spring】Spring中的循环依赖及解决

    什么是循环依赖? 就是A对象依赖了B对象,B对象依赖了A对象. 比如: // A依赖了B class A{ public B b; } // B依赖了A class B{ public A a; } ...

  10. 重置networker9.0密码

    一.重置Networker 9.0密码 下面所有步骤在Networker服务器上操作 1.创建"mypassword_in.txt"文件 在服务器C盘根目录下创建一个 " ...