WebRTC 用例和性能
WebRTC 用例和性能
实现低延迟、点对点传输是一项艰巨的工程挑战:有 NAT 遍历和连接检查、信令、安全、拥塞控制和无数其他细节需要处理。WebRTC 代表我们处理以上所有内容,这就是为什么它可以说是自网络平台成立以来最重要的补充之一。事实上,这不仅仅是 WebRTC 提供的单个部分,而是所有组件协同工作以提供用于在浏览器中构建点对点应用程序的简单统一的 API。
然而,即使有所有内置服务,设计高效和高性能的点对点应用程序仍然需要大量仔细的思考和规划:点对点本身并不意味着高性能。如果有的话,对等点之间带宽和延迟的增加的可变性,媒体传输的高要求,以及不可靠交付的特性,使其成为一项更加艰巨的工程挑战。
音频、视频和数据流
点对点音频和视频流是 WebRTC 的核心用例之一:getUserMediaAPI 使应用程序能够获取媒体流,内置的音频和视频引擎处理流之间的优化、错误恢复和同步。然而,重要的是要记住,即使采用积极的优化和压缩,音频和视频传输仍然可能受到延迟和带宽的限制:
- 高清质量的流需要 1-2 Mbps 的带宽;请参阅 音频 (OPUS) 和视频 (VP8) 比特率。
好消息是全球的平均带宽容量正在持续增长:用户正在转向宽带,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 用例和性能的更多相关文章
- 第一次个人项目【词频统计】——测试样例分析&性能分析
[空文件测试](认为空文件行数为0) [基本测试] [大小写测试] 可以看出abcd同类型的词出现了三次,而单词树中存储的是ABCd,满足大小写要求. [复杂文件测试] 前三项数据比较接近,但是单词和 ...
- webRTC的标准与发展
Web实时通信(WebRTC)是标准,协议和JavaScript API的集合,两者的组合可实现浏览器(对等)之间的对等音频,视频和数据共享.WebRTC无需依赖第三方插件或专有软件,而是将实时通信转 ...
- (译)WebRTC实战: STUN, TURN, Signaling
http://xiaol.me/2014/08/24/webrtc-stun-turn-signaling/ 原文:WebRTC in the real world: STUN, TURN and s ...
- Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键?
本文主要介绍WebRTC端到端监控(我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信I ...
- Nginx 引入线程池,提升 9 倍性能
转载:http://blog.csdn.net/wuliusir/article/details/50760357 众所周知,NGINX 采用异步.事件驱动的方式处理连接.意味着无需对每个请求创建专门 ...
- C++ 性能剖析 (一)
C++ 性能剖析 (一) 性能问题也不是仅仅用“技术”可以解决的,它往往是架构,测试,假设等综合难题.不过,对于一个工程师来说,必须从小做起,把一些“明显”的小问题解决.否则的话积小成多,千里堤坝,溃 ...
- iOS 中的单例设计模式
单例设计模式:在它的核心结构中只包含一个被称为单例类的特殊类.例如文件管理中的NSUserDefault,应用程序中的UIApplication,整个应用程序就这一个单例类,负责应用程序的一些操作,单 ...
- 《Web性能权威指南》
<Web性能权威指南> 基本信息 原书名:High performance browser networking 原出版社: O'Reilly Media 作者: (加)Ilya Grig ...
- Web性能权威指南 PDF扫描版
Web性能权威指南是谷歌公司高性能团队核心成员的权威之作,堪称实战经验与规范解读完美结合的产物.<Web性能权威指南>目标是涵盖Web开发者技术体系中应该掌握的所有网络及性能优化知识.全书 ...
随机推荐
- 宝,我今天CR了,C的什么R? 走过场的CR
原创:猿天地(微信公众号ID:cxytiandi),欢迎分享,转载请保留出处. CodeReview我相信目前很多公司都会有这么一个流程,关键是这个流程有没有用就很难讲.主要还是取决于你对CR的理解以 ...
- 【.NET 与树莓派】LED 数码管驱动模块——TM1638
LED 数码管,你可以将它看做是 N 个发光二级管的组合,一个灯负责显示一个段,七个段组合一位数字,再加一个小数点,这么一来,一位数码管就有八段.一般,按照顺时针的方向给每个段编号. 上图中的 h 就 ...
- 机械革命z2安装ubuntu20
为了性能买了个游戏本机械革命z2,但还是想用上linux,身为程序员习惯了linux的开发环境有点离不开.但是之前尝试安装deepin或者linux都失败了,一是N卡条件下安装过程和安装之后的显示有问 ...
- 【Spring Cloud & Alibaba 实战 | 总结篇】Spring Cloud Gateway + Spring Security OAuth2 + JWT 实现微服务统一认证授权和鉴权
一. 前言 hi,大家好~ 好久没更文了,期间主要致力于项目的功能升级和问题修复中,经过一年时间的打磨,[有来]终于迎来v2.0版本,相较于v1.x版本主要完善了OAuth2认证授权.鉴权的逻辑,结合 ...
- c++11 线程间同步---利用std::condition_variable实现
1.前言 很多时候,我们在写程序的时候,多多少少会遇到下面种需求 一个产品的大致部分流程,由工厂生产,然后放入仓库,最后由销售员提单卖出去这样. 在实际中,仓库的容量的有限的,也就是说,工厂不能一直生 ...
- 其他:IntelliJ IDEA设置运行内存
1. 打开idea的安装路径,进去bin目录 2. 修改idea.exe.vmoptions 将idea内存设置为-Xms512m -Xmx2048m -XX:ReservedCodeCacheS ...
- HADOOP及SPARK安装步骤及问题解决
说明:主节点IP:192.168.35.134 主机名:master 从节点slave1 IP: 192.168.35.135 主机名:slave1 从节点slave2 IP: 192.168 ...
- Spring中如何使用自定义注解搭配@Import引入内外部配置并完成某一功能的启用
文章背景 有一个封装 RocketMq 的 client 的需求,用来提供给各项目收.发消息,但是项目当中常常只使用收或者发消息的单一功能,而且不同的项目 group 等并不相同而且不会变化,可以在项 ...
- Djiango 连接数据库mysql 的基本数据操作
1.单表操作 (1) .增加操作 1 # 增加操作 2 def add_person(request): 3 # 1.使用save() 方法 4 # person_obj = models.Perso ...
- Socket 编程介绍
Socket 编程发展 Linux Socket 编程领域,为了处理大量连接请求场景,需要使用非阻塞 I/O 和复用.select.poll 和 epoll 是 Linux API 提供的 I/O 复 ...