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. 入门Kubernetes - YAML文件

    前言 前篇文章中简单了解到如何把.Net Core 程序部署到k8s中,过程中使用了多个*.yaml文件,那么这些文件的格式及含义.语法是如何的呢? 接下来,进一步了解学习 一.YAML介绍: 1.简 ...

  2. 环境安装——MySQL安装

    @ 目录 一文教会你安装与卸载MySQL 1. 官网下载 2. 文件下载 3. 卸载步骤 4. 安装步骤 5. MySQL配置 6. 安装出现的问题 6.1 如果出现了最后一步卡死的状态的话,不要慌: ...

  3. 在Linux/Unix系统下用iconv命令处理文本文件中文乱码问题

    iconv命令是运行于linux/unix平台的文件编码装换工具.当我们在linux/unix系统shell查看文本文件时,常常会发现文件的中文是乱码的,这是由于文本文件的编码与当前操作系统设置的编码 ...

  4. UI自动化学习笔记- Selenium元素等待(强制等待、显示等待、隐式等待)

    一.元素等待 1. 元素等待 1.1 什么是元素等待 概念:在定位页面元素时如果未找到,会在指定时间内一直等待的过程 意思就是:等待指定元素已被加载出来之后,我们才去定位该元素,就不会出现定位失败的现 ...

  5. MongoDB数据库 5分钟快速上手

    安装 本次安装使用docker镜像,安装无障碍,一行命令即可解决 # 安装镜像并启动 可以自行修改命令中的参数 ## 账户 tanoak 密码 123123 ## -p 27018:27017 映射端 ...

  6. JAVA并发(8)-ThreadPoolExecutor的讲解

    很久前(2020-10-23),就有想法学习线程池并输出博客,但是写着写着感觉看不懂了,就不了了之了.现在重拾起,重新写一下(学习一下). 线程池的优点也是老生常谈的东西了 减少线程创建的开销(任务数 ...

  7. 暑假自学java第六天

    1,方法的覆盖:当子类继承父类,而子类中的方法与父类中方法的名称,返回类型及参数都完全一致时,就称子类中的方法覆盖了父类中的方法,有时也称方法的"重写" [不需要关键字] 2,th ...

  8. mysql导入脚本

    #登陆 mysql -u root -p #创建数据库 CREATE DATABASE `gps` CHARACTER SET utf8 COLLATE utf8_general_ci; #选择数据库 ...

  9. buu RSA

    一.分析 下载链接,发现一个公钥的文件(e,n),和一个加密过的文件 二. 公钥文件,里面一堆字母,然后后面百度,才知道需要去解开n,e 指数是e,模数是n(十六进制) 三.再通过n来分解素数,得到p ...

  10. C语言:位运算

    所谓位运算,就是对一个比特(Bit)位进行操作.在<数据在内存中的存储>一节中讲到,比特(Bit)是一个电子元器件,8个比特构成一个字节(Byte),它已经是粒度最小的可操作单元了.C语言 ...