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. Linux Oracle 中文乱码解决

    1.Linux操作系统Oracle11g设置别名的时候发现中文乱码 2.直接修改环境变量 添加 export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 3.执行命令使环境变 ...

  2. 解决使用gomod后goland导包报红问题

    解决使用gomod后goland导包报红问题 项目环境: ubuntu14+goland 问题详情: 在root用户下执行go mod init {module name}使用了gomod,并编译了项 ...

  3. 关于XXE漏洞

    XXE漏洞 0x01.xxe是什么 介绍 XXE 之前,我先来说一下普通的 XML 注入,这个的利用面比较狭窄,如果有的话应该也是逻辑漏洞 1.1xml定义 XML用于标记电子文件使其具有结构性的标记 ...

  4. Collections中的实用方法

    总结一下java.util.Collections类内部的静态方法. checkedCollection(Collection<T> , Class<T> type) chec ...

  5. 消息队列——kafka

    原文:再过半小时,你就能明白kafka的工作原理了 会出现什么情况呢? 1.为了这个女朋友,我请假回去拿(老板不批). 2.小哥一直在你楼下等(小哥还有其他的快递要送). 3.周末再送(显然等不及). ...

  6. PHP获取文件扩展名的常用方法小结【五种方式】

    方法1:   function getExt1($filename) {    $arr = explode('.',$filename);    return array_pop($arr);; } ...

  7. vue3后台管理系统(模板)

    系统简介 此管理系统是基于Vite2和Vue3.0构建生成的后台管理系统.目的在于学习vite和vue3等新技术,以便于后续用于实际开发工作中: 本文章将从管理系统页面布局.vue路由鉴权.vuex状 ...

  8. 长按短按控制LED灯-ESP32中断处理

    #include <stdio.h> #include <string.h> #include <stdlib.h> #include "freertos ...

  9. Redis的结构和运作机制

    目录 1.数据库的结构 1.1 字典的底层实现 2.过期键的检查和清除 2.1 定时删除 2.2 惰性删除 2.3 定期删除 2.4 对RDB.AOF和复制的影响 3.持久化机制 3.1 RDB方式 ...

  10. 「CF1380G」 Circular Dungeon

    CF1380G Circular Dungeon 看懂样例就能做. 虽然我瞪了 20 分钟 菜是原罪 首先可以将从每一个点出发所能获得的价值相加,再除以 \(n\) 就可以得到价值的期望. 所以问题转 ...