WebRTC 用例和性能

2023-10-27

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流的成本,其他所有人都直接与超级节点对话。

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

作者:anyRTC
原文 

 

★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。

见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebRTC 用例和性能 的相关文章

  • Html5视频录制和上传?

    我需要创建一个可以使用网络摄像头或移动摄像头录制视频的应用程序 它需要跨平台 到目前为止 我已经使用 webrtc getusermedia 编写了一个小型概念证明 它可以录制视频和播放 但我不确定如何将文件上传回服务器 这是此示例的链接h
  • Twilio Video API 的房间内的参与者数量有限制吗?

    Twilio Video API 中的团体类型房间的参与者数量有限制吗 文档中指定了对等类型的限制 但没有提及团体类型房间 UPDATE Twilio 在其博客文章中提到每个房间最多可容纳 50 名参与者 看起来是一个非常小的数字 还是一样
  • 在 xcode 版本 10.2 中为产品类型“应用程序”签署二进制文件时,空身份无效

    我已经编译了 webrtc ios 源代码 然后我使用了命令 gn gen out ios args target os ios target cpu arm64 ide xcode 然后我用 Xcode 打开工作区 但是当我编译代码时 X
  • swift webrtc 修改 CMSampleBuffer 以应用一些滤镜效果

    我想在localVideo中添加一些滤镜效果 所以我修改了CMSampleBuffer 转换为 UIImage 使用VNFaceDetector检测人脸boundingBox 将我的滤镜图像添加到相机图像中 转换回 CMSampleBuff
  • org.webrtc.RTCPeerConnection 无法将视频发布到服务器

    我使用 webrtc 在会议中发送和获取视频 子主视频正常显示 但问题是视频没有发布到服务器 我检查方法 setlocalDescription 没有返回错误 这是我的sdp 有人可以帮忙吗 我搜索了很多解决方案 但我仍然不知道我的问题 我
  • 通过 websocket 的 SIP 到真正的 SIP

    我正在尝试实现一个 sip 服务器用于从HTMLsip客户端 使用sipml5制作 在我研究这样做的过程中 我遇到了 sip over web sockets 这可能对我有用 但是 我不确定用户代理是否通过 sip over 连接web s
  • Bug 报告者:getDisplayMedia 的替代品?

    我正在尝试在我的网站上实现错误报告器 我的目标是用户能够在解决问题时以声音描述问题并记录浏览器选项卡 错误报告将只是一个视频文件 可以通过电子邮件发送给我 看来提议的navigator mediaDevices getDisplayMedi
  • 如何在 Safari 浏览器上获取 WebRTC 日志

    我一直在尝试获取在 safari 浏览器上运行的 Web 应用程序的 webrtc 日志 类似于我们通过转到页面在 Firefox 中获取的日志about webrtc并在 chrome 上使用chrome webrtc internals
  • 使用媒体流扩展 (MSE) 显示 getUserMedia Stream 实时视频

    我正在尝试使用 getUserMedia 显示从网络摄像头获取的 MediaStream 并使用任何可能播放的机制将其中继到远程对等点 作为实验 我没有直接使用 webRTC 因为我想控制原始数据 我遇到的问题是我的视频元素不显示任何内容
  • iOS Webrtc - 捕获本地视频流时崩溃

    我正在尝试使用 Google 存储库中的 webrtc 库 我按照这些步骤创建了一个单独的项目 其中包含类似于 APPRTC 的说明和代码 并且我能够让它工作 我能够在两台设备之间进行会议 但是当我尝试与旧项目集成时 Webrtc 崩溃了
  • 使用 ASP.NET MVC 处理/接收从 WebRTC 或任何基于浏览器的捕获机制到服务器的实时视频网络摄像头流

    我们需要从 WebRTC 或来自客户端网络摄像头的任何其他捕获机制 即使并非所有浏览器都支持 但作为 PoC 捕获实时视频流 该实时视频需要由服务器组件 ASP Net MVC Web API 处理 我想服务器上的代码将如下所示 HttpP
  • SignalR WebRTC WebSocket 已处于 CLOSING 或 CLOSED 状态

    我想测试运行 SignalR 和 WebRTC 的最简单实现 我将代码托管在https github com foyzulkarim WebRtc https github com foyzulkarim WebRtc 我制作了两个不同的文
  • 是否可以从具有跨源数据的元素中捕获?

    我在 webRTC 文档中找到了这个简单的脚本 我尝试运行它 但似乎我遗漏了一些东西 const leftVideo document getElementById leftVideo const rightVideo document g
  • Android WebRTC 自定义捕获器

    我已经编译了 webRTC 演示应用程序 我看到捕获帧是由VideoCaptureAndroid java与本机代码紧密耦合的文件 我需要添加将我自己的帧推送到 webRTC 库以在视频通道上发送的功能 我可以用 C NDK 或 Java
  • React Native - 在 Android 中显示传入视频通话屏幕(VOIP 应用程序)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试实施视频通话React Native 应用程序中的功能 我用过React 原生 twilio 视频 webrtc https
  • 我可以简化同一专用网络上计算机的 WebRTC 信号传输吗?

    WebRTC 信号让我发疯 我的用例非常简单 信息亭和控制室网络应用程序之间的双向音频对讲 两台计算机都在同一网络上 两者都无法访问互联网 所有机器都有已知的静态 IP 我读到的所有内容都希望我使用 STUN TURN ICE 服务器 这个
  • Libsourcey 缺少 -fPIC 编译错误

    我正在尝试运行 LibSourcey 以使用 Webrtc 流服务器 问题是我似乎无法让它发挥作用 我努力在我的 Ubuntu 16 04 上 cmake 该项目 cmake 文件中的正则表达式 但现在它已修复 我实际上遇到的问题是编译时的
  • 如何在 Android webRTC 上启用 H264

    如何在 Android WebRTC 上启用 H264 PeerConnection to createOfferSDP中没有h264描述 由于某种原因 Google 默认会阻止他们自己的软件编解码器 因此 如果您的芯片组中没有硬件解码 或
  • 通过 Websockets 进行 WebRTC 视频聊天

    我正在尝试使用 webRTC 和 WebSockets 进行信号发送来开发视频聊天应用程序 我的问题是 我不知道创建 RTCPeerConnection 并通过 webSocket 连接两个对等点 2 个浏览器 的过程是什么 至少在本地 我
  • Twilio webRTC 通话在 10 分钟后中断

    使用 Twilio js 使用 webRTC 录制通话 工作正常 但在 10 分钟时 完全正确 电话挂断 TwiML 上的最大记录时间设置为 7200 秒 浏览器的控制台显示 Twilio PeerConnection signalingS

随机推荐

  • 计算机科普杂文一篇

    最近这一两年 因为工作需要 学了杂七杂八的很多语言 再加上平时看的从美国来的书籍 正好有空 写一篇关于计算机入门级的杂文 那我先从网络说起 我希望讲的简单明了 各位一看就懂 由于在现实世界 十进制 六十进制等方式表达数字不是很稳定 容易出错
  • 笔记本电脑显示屏忽明忽暗怎么解决

    笔记本电脑在工作时忽明忽暗 这是由于笔记本接通了电源线 处于边充电边工作的状态 当电池已经充满时 充电电源就会时而接通 时而断开 导致电脑在电源线供电和电池供电之间来回切换 在一般情况下利用电池供电时屏幕亮度会设置得低一些 因此在这种情况下
  • 亚马逊云科技的十年创新之路

    2006年3月14日 计算时代的新纪元由此拉开帷幕 就在这一天 Amazon Web Services发布了Simple Storage Service 简称S3 从技术角度讲 Simple Queuing Services的发布时间更早一
  • 好分数阅卷3.0_高考出现的“神仙卷面”,阅卷老师都舍不得扣分,值得学习!...

    来源 教育导向 2020年的高考已经进入阅卷的阶段 各地的阅卷老师都在进行紧张的评卷工作 由于现在都是实行随机的电脑评卷 所以考生的试卷都会被扫描到电脑当中 然后阅卷老师都是根据电脑扫描的内容进行评分 在整个过程当中 考生所写的字体情况 就
  • 字符设备驱动开发总概

    字符设备是 Linux 驱动中最基本的一类设备驱动 字符设备就是一个一个字节 按照字节流进行读写操作的设备 读写数据是分先后顺序的 比如我们最常见的点灯 按键 IIC SPI LCD 等等都是字符设备 这些设备的驱动就叫做字符设备驱动 在
  • jqGrid 列表操作

    jQuery list jqGrid url users do colNames 流水号 姓名 性别 工号 入职时间 手机 职务 定位 colModel name id index id hidden true 隐藏ID列 name nam
  • 基础概念:抽象和接口、继承和组合

    在面向对象编程中 抽象类和接口是两个经常被用到的语法概念 是面向对象的四大特性 以及很多设计模式 设计思想 设计原则编程实现的基础 如 可以使用接口来实现面向对象的抽象特性 多态特性和基于接口而非实现的设计原则 使用抽象类来实现面向对象的继
  • Linux系统执行git pull命令拉取代码,每次都要输入用户名和密码

    执行该命令后 再输入一次用户名和密码 以后就不需要再输入了 会在 root 目录下生成一个 gitconfig 的文件 git config global credential helper store
  • 华为手机如何与台式计算机连接不上,华为手机连接不上电脑怎么处理

    您好 场景A 连接电脑后盘符可以显示 但是没有文件 无法拷贝数据至电脑或手机 确认USB线是否良好 可以通过是否能正常充电来判断USB线的好坏 下拉通知栏里USB已连接下方是否显示仅充电 如果是 则点击管理文件即可 然后点击 计算机 选择便
  • jmeter JDBC数据库连接与数据库压测

    数据库配置 数据库配置 JDBC Connection COnfiguration 连接池管理 variable Name for created poll 创建数据池的名称 这里的名称 下面的jdbc要一致 Max Number of C
  • C知识点总结(格式以后再整理,近期笔试面试太多)

    1 局部变量能否和全局变量重名 答 能 局部会屏蔽全局 要用全局变量 需要使用 局部变量可以与全局变量同名 在函数内引用这个变量时 会用到同名的局部变量 而不会用到全局变量 对于有些编译器而言 在同一个函数内可以定义多个同名的局部变量 比如
  • 吐血熬夜一个月整理出这一份自动化测试超全学习指南【附网盘资源+项目+面试攻略】

    最近看到很多粉丝在后台私信我 叫我做一期Python自动化测试学习路线图和想要学习资料 其实关于这个问题 功能测试想转自动化 请问应该怎么入手 有没有好的资源推荐 学习路线和网盘资源 实战项目都放在文末了 我也早就在着手准备了 所以今天它来
  • Android Studio 显示Git的Local Changes窗口

    前言 因为使用新的mac环境 下载了最新的android studio 今天在做开发后 想看看本地修改了哪些文件 结果发现本人熟悉的Local Changes窗口居然找不到了 不习惯的让我浑身难受 解决方法 打开Preferences 选择
  • linux编译运行build.sh,linux下libwebsockets编译及实例

    最近想自己搭建一个webscoket协议的服务器 打算用libwebsockts这个库 下载代码编译 编写一个shell脚本 bin sh wget http git warmcat com cgi bin cgit libwebsocke
  • c语言常用关键字既其解释(1)

    数据类型类 1 auto 自动 自动变量类型 局部变量都是自动创建 自动销毁的 所有局部变量都是自动变量 为了书写方便就全部省略了 int a gt auto int a 省略 2 char 字符 字符变量类型 char c1 a char
  • git提交出现remote rejected master -> XX changes closed

    问题现象 提交git的时候出现 remote rejected master gt refs for master change http XXXX com myreview changes 1721438 closed error fai
  • 制作精良讲解清晰的Lumen原理

    老奇 阴差阳错 撼动世界的游戏引擎 哔哩哔哩 bilibili 推荐一个制作精良讲解清晰的Lumen原理视频给大家 这种有营养但又很可口的技术科普视频 来之不易啊
  • WPF,如何让TextBox中的文字垂直居中

    VerticalContentAlignment Center
  • 基础算法题——位运算之谜(数论)

    位运算之谜 题目链接 数论 a b a xor b 2 a b 变式可得 a xor b a b 2 a b 另外还要排除两种不能被组成的情况 a b 2 a b lt 0 a xor b最小为0 不存在小于0的值 a b a b 2 a
  • WebRTC 用例和性能

    WebRTC 用例和性能 实现低延迟 点对点传输是一项艰巨的工程挑战 有 NAT 遍历和连接检查 信令 安全 拥塞控制和无数其他细节需要处理 WebRTC 代表我们处理以上所有内容 这就是为什么它可以说是自网络平台成立以来最重要的补充之一