当前位置: 首页 > news >正文

WebRTC基础理论和通话原理

WebRTC理论知识

1.什么是WebRTC?

        WebRTC(Web RealTime Communication)是 Google于2010以6829万美元从 Global IP Solutions 公司购买,并 于2011年将其开源,旨在建立一个互联网浏览器间的实时通信的平台,让 WebRTC技术成为 H5标准之一。它定义了一组标准化的API,用于在浏览器和移动应用程序中进行实时语音、视频和数据通信,无需安装任何插件或其他软件。

1.2 WebRTC框架

主要组件组成:

  • WebRTC API:

    • 这是 WebRTC 的核心 API,提供了用于建立端到端连接、发送和接收媒体流的功能。

    • 这些 API 包括 getUserMediaRTCPeerConnectionRTCDataChannel 等。

      • WebRTC Native C++ API:本地C++ API层,使浏览器厂商容易实现WebRTC标准的Web API,抽象地对数字信号过程进行处理。

  • 信令服务器:

    • WebRTC 需要一个信令服务器来协调客户端之间的连接过程。

    • 信令服务器负责交换连接信息,如 SDP (Session Description Protocol) 协商和 ICE 候选。

    • 信令服务器可以使用 WebSocket、HTTP 等协议进行通信。

  • STUN 和 TURN 服务器:

    • STUN (Session Traversal Utilities for NAT) 服务器用于帮助客户端发现自己的公网 IP 地址和端口。

    • TURN (Traversal Using Relays around NAT) 服务器用于在客户端无法直接连接时提供中继服务。

  • 编解码器和媒体引擎:

    • WebRTC 内置了多种音视频编解码器,如 VP8、VP9、H.264 等,以及音频编解码器 Opus。

    • 媒体引擎负责捕获、编码、传输和解码媒体流。

  • 安全机制:

    • WebRTC 使用 DTLS 和 SRTP 等加密协议来确保通信的安全性和隐私性。

  • WebRTC 库和框架:

    • 诸如 PeerJS、SimpleWebRTC 等开源 JavaScript 库,提供了更高级的 WebRTC 功能封装。

    • 一些 WebRTC 框架,如 Janus Gateway、Kurento Media Server,提供了更强大的服务端功能。

上图的框架对于不同的开发人员关注点不同:

(1)紫色部分是Web应用开发者API层

(2)蓝色实线部分是面向浏览器厂商的API层

(3)蓝色虚线部分浏览器厂商可以自定义实现

小结:作为开发人员,主要关注WebRTC API层,特别是图中的 PeerConnection 为 Web 开发人员提供了一个抽象,从复杂的内部结构中抽象出来。我们只需要关注 PeerConnection这个对象即可以开发音视频通话应用内。

1.3WebRTC发展前景

WebRTC 作为一项实时通信技术,在未来几年内有着广阔的发展前景,主要体现在以下几个方面:

  • 浏览器和移动端的原生支持:

    • 目前主流浏览器如 Chrome、Firefox、Safari、Edge 等都已经原生支持 WebRTC,无需安装任何插件。

    • 移动端 App 也可以通过 WebRTC 库进行跨平台的实时通信集成。

    • 这种广泛的原生支持为 WebRTC 的未来发展奠定了基础。

  • 视频通话和会议的崛起:

    • 在疫情期间,视频会议和远程办公/教育需求激增,WebRTC 技术在这些场景中发挥了重要作用。

    • 未来随着 5G 网络的普及,视频通话和高清视频会议将越来越普及,WebRTC 将在这些应用中大显身手。

  • 实时互动应用的兴起:

    • 除了视频通话,WebRTC 还可以用于构建实时协作、在线游戏、远程医疗等各种实时互动应用。

    • 这些应用领域都需要低延迟、高质量的实时通信能力,WebRTC 可以很好地满足这些需求。

  • 物联网和边缘计算的结合:

    • 随着物联网和边缘计算的发展,WebRTC 有望在这些领域发挥重要作用。

    • 通过 WebRTC,物联网设备可以实现端到端的实时数据传输和远程控制。

  • 实时视频分析和人工智能应用:

    • WebRTC 可以为实时视频分析和人工智能应用提供数据来源。

    • 结合 WebRTC 的实时性和机器学习技术,可以开发出智能监控、人脸识别等应用。

  • 安全性和隐私性的优势:

    • WebRTC 内置了安全加密机制,如 DTLS 和 SRTP,能够确保通信的安全性和隐私性。

    • 这对于一些涉及隐私敏感数据的应用场景非常重要。

小结:WebRTC 作为一项开放、标准化的实时通信技术,在未来几年内将会在各种应用场景中得到广泛应用和发展。随着 5G 网络、物联网、人工智能等技术的进步,WebRTC 的应用前景将更加广阔。

WebRTC通话原理

首先思考的问题:两个不同网络环境的(具备摄像头/麦克风多媒体设备的)浏览器,要实现点对点 的实时音视频对 话,难点在哪里?

答:

  1. 媒体协商

  2. 网络协商

  3. 交换通道(传输媒体协商和网络协商后的数据)

媒体协商

 意思是彼此要了解对方支持的媒体格式,必须采用支持相同的编解码。

解决方案:

有一个专门的协议 ,称为Session Description Protocol (SDP),可用于描述上述这类信息,在WebRTC中,参 与视频通讯的双方必须先交换SDP信息,这样双方才能知根知底,而交换SDP的过程,也称为"媒体协商"。

网络协商

 意思是彼此要了解对方的网络情况,这样才有可能找到一条相互通讯的链路。在WebRTC中用来描述 网络信息的术语叫candidate

实现难点:

NAT 和防火墙穿透:

- 客户端通常位于 NAT 网络之后,无法直接访问对方的公网 IP 地址和端口。
- 解决方案:需要使用 STUN 和 TURN 服务器,帮助客户端发现自己的公网 IP 地址和端口,并尝试各种连接方式。

STUN

STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)是一种网络协议,是一个用于帮助 WebRTC 客户端发现自己的公网 IP 地址和端口的协议。

STUN 协议的一个重要特点是采用了 UDP 协议,这是因为 UDP 比 TCP 更适合于客户端探测自己的网络信息。UDP 的请求-响应模式也更适合于 STUN 服务器的工作方式。

STUN 的工作原理如下:

客户端询问 STUN 服务器:

  • WebRTC 客户端向预先配置的 STUN 服务器发送一个 STUN 请求。

  • STUN 请求中包含客户端的本地 IP 地址和端口信息。

STUN 服务器响应客户端:

  • STUN 服务器收到请求后,会检查客户端的 IP 地址和端口,并感知它们是否被 NAT 转换了。

  • STUN 服务器会将客户端的公网 IP 地址和端口信息包含在响应消息中返回给客户端。

客户端获取自身网络信息:

  • 客户端收到 STUN 服务器的响应后,就可以获取自身的公网 IP 地址和端口信息。

  • 这些信息对于后续的 WebRTC 连接建立非常重要。

使用一句话说明STUN做的事情就是:告诉我你的公网IP地址+端口是什么。搭建STUN服务器很简单,媒体流传输是 按照P2P的方式。

TURN

        TURN (Traversal Using Relays around NAT) 协议,它提供了更强大的穿透功能,可以在 STUN 无法直接穿透 NAT 时提供中继服务。是STUN/RFC5389的一个拓展,主要添加了Relay功能。如果 终端在NAT之后, 那么在特定的情景下,有可能使得终端无法和其对等端(peer)进行直接的通信,这时就需要公 网的服务器作为一个中继, 对来往的数据进行转发。这个转发的协议就被定义为TURN。

         在STUN分配公网IP失败后,可以通过TURN服务器请求公网IP地址作为中继地址。这种方式的带宽由服务器端承 担,在多人视频聊天的时候,本地带宽压力较小,并且,根据Google的说明,TURN协议可以使用在所有的环境中。 (单向数据200kbps 一对一通话,假设c-a 传输200kbps c-b同理,服务器则需承受200kbps * 2)        

小结:先进行stun nat转化是否成功拿到公网ip+port的映射ip,失败则进行turn的中继服务器传输数据。 

交换通道

已得到媒体信息和网络信息,那怎么去交换?是不是需要一个中间商去做交换?

答:我们需要一个信令服务器(Signal server)转发彼此的媒体信息和网络信息。

我们在基于WebRTC API开发应用(APP)时,可以将彼此的APP连接到信令服务器(Signal Server,一般 搭建在公网,或者两端都可以访问到的局域网),借助信令服务器,就可以实现上面提到的SDP媒体信息及 Candidate网络信息交换。

信令服务器不只是交互 媒体信息sdp和网络信息candidate,比如: 房间管理

 ICE

ICE(交互式连接建立)

ICE(Interactive Connectivity Establishment)并不是一种协议,而是一个框架,用于帮助在NAT(网络地址转换)环境中建立UDP多媒体会话,它负责找出两个对等方最佳的通信方式,无论是直接的点对点连接还是通过中继服务器 。

ICE的主要功能包括:

  • 收集候选地址:ICE会收集三种类型的地址,包括本地网络接口地址、STUN服务器地址和TURN服务器地址。

  • 排序候选地址:根据优先级对候选地址进行排序,以便选择最佳连接路径。

  • 连接检查:通过STUN请求和响应进行连接可用性检测。

  • 冻结候选地址:在连接建立后,ICE会冻结某些候选地址以优化连接过程。

  • 安全检查:通过消息授权码(MAC)验证消息的真实性和来源。

ICE的目标是发现哪些地址对可以成功建立连接,并选择最佳的连接方式 [1][3]。

总结起来:

  • ICE 是 WebRTC 用于建立两个对等方连接的整体框架。

  • STUN 用于确定每个对等方的公网 IP 地址和 NAT 类型,这有助于 ICE 找到最佳的连接方式。

  • TURN 在直接的点对点连接不可能的情况下被用作最后的手段,提供了一个中继服务器来转发两个对等方之间的媒体流量。

 "打洞"

"打洞"就是指使用 STUN 和 TURN 协议来帮助这两个对等方找到一种方式建立连接的过程。具体来说:

  1. STUN 协议可以帮助对等方发现自己的公网 IP 地址和端口信息,这些信息被称为 ICE 候选者(ICE Candidate)。

  2. 然后,对等方会通过信令服务器交换这些 ICE 候选者信息。

  3. 接下来,ICE 框架会尝试使用这些 ICE 候选者,通过各种方式(如 UDP 穿透 NAT、TCP 连接等)来建立 P2P 连接。这个过程就叫做"打洞"。

如果 STUN 协议无法成功穿透 NAT,那么就需要使用 TURN 协议,由 TURN 服务器充当中转站来转发两个对等方的媒体数据。

总之,"打洞"指的就是 WebRTC 在建立 P2P 连接时使用的一系列技术手段,包括 STUN 和 TURN 协议,目的是要穿透各种网络环境的限制,实现对等方之间的直接通信。

学习资料分享

0voice · GitHub

相关文章:

WebRTC基础理论和通话原理

WebRTC理论知识 1.什么是WebRTC? WebRTC(Web RealTime Communication)是 Google于2010以6829万美元从 Global IP Solutions 公司购买,并 于2011年将其开源,旨在建立一个互联网浏览器间的实时通信的平台,让 WebRTC技术…...

NPU 可不可以代替 GPU

结论 先说结论,GPU分为可以做图形处理的传统意义上的真GPU,做HPC计算的GPGPU和做AI加速计算的GPGPU,所以下面分别说: 对于做图形处理的GPU,这个就和NPU 一样,属于DSA,没有替代性。当然&#xf…...

Vue3版本的uniapp项目运行至鸿蒙系统

新建Vue3版本的uniapp项目 注意,先将HbuilderX升级至最新版本,这样才支持鸿蒙系统的调试与运行; 按照如下图片点击,快速升级皆可。 通过HbuilderX创建 官方文档指导链接 点击HbuilderX中左上角文件->新建->项目 创建vue3…...

部署stable-diffusion3.5 大模型,文生图

UI 使用推荐的ComfyUI,GitHub 地址,huggingface 需要注册登录,需要下载的文件下面有说明 Dockerfile 文件如下: FROM nvidia/cuda:12.4.0-base-ubuntu22.04 RUN apt-get update && apt-get install python3 pip git --n…...

数据采集之selenium模拟登录

使用Cookijar完成模拟登录 本博文爬取实例为内部网站,请sduter使用本人账号替换*********(学号),***(姓名)进行登录 from selenium import webdriver from selenium.webdriver.common.by import By from…...

机器学习中的两种主要思路:数据驱动与模型驱动

在机器学习的研究和应用中,如何从数据中提取有价值的信息并做出准确预测,是推动该领域发展的核心问题之一。在这个过程中,机器学习方法主要依赖于两种主要的思路:数据驱动与模型驱动。这两种思路在不同的应用场景中发挥着至关重要…...

【计算机网络】TCP协议面试常考(一)

三次握手和四次挥手是TCP协议中非常重要的机制,它们在多种情况下确保了网络通信的可靠性和安全性。以下是这些机制发挥作用的一些关键场景: 三次握手的必要性: 同步序列号: 三次握手确保了双方的初始序列号(ISN&#…...

C#/.NET/.NET Core学习路线集合,学习不迷路!

前言 C#、.NET、.NET Core、WPF、WinForm、Unity等相关技术的学习、工作路线集合(持续更新)!!! 全面的C#/.NET/.NET Core学习、工作、面试指南:https://github.com/YSGStudyHards/DotNetGuide C#/.NET/.N…...

使用哈希表做计数排序js

function hashSort(arr) {// 创建一个哈希表(对象),统计每个数字出现的次数let hashMap {};arr.forEach(num > {if (hashMap[num]) {hashMap[num] 1;} else {hashMap[num] 1;}});// 根据哈希表的键值对构建排序后的数组let sortedArr …...

京津冀自动驾驶技术行业盛会|2025北京自动驾驶技术展会

“自动驾驶技术”已经成为全球汽车产业的焦点之一。在这个充满创新与变革的时代,“2025北京国际自动驾驶技术展览会”拟定于6月份在北京亦创国际会展中心盛大开幕,为全球自动驾驶技术领域的专业人士、企业以及爱好者们提供了一个交流与展示的平台。作为一…...

Chrome与火狐哪个浏览器的隐私追踪功能更好

当今数字化时代,互联网用户越来越关注在线隐私保护。浏览器作为我们探索网络世界的重要工具,其隐私追踪功能的强弱直接影响到个人信息的安全。本文将对比Chrome和Firefox这两款流行的浏览器,在隐私追踪防护方面的表现,并探讨相关优…...

探索 Python 图像处理的瑞士军刀:Pillow 库

文章目录 探索 Python 图像处理的瑞士军刀:Pillow 库第一部分:背景介绍第二部分:Pillow库是什么?第三部分:如何安装这个库?第四部分:简单的库函数使用方法第五部分:结合场景使用库第…...

JavaScript中的if、else if、else 和 switch

写在前面 在编程中,条件判断是控制程序流程的重要手段。JavaScript 提供了多种方式来进行条件判断,包括 if、else if、else 和 switch。本文将详细介绍这些语句的语法、用法以及一些相关的注意事项。 if、else if 和 else 语法 if、else if 和 else …...

Python 使用 langchain 过程中的错误总结

1. 环境 conda activate langchain pip install -U langchain$ pip show langchain Name: langchain Version: 0.3.7 Summary: Building applications with LLMs through composability Home-page: https://github.com/langchain-ai/langchain Author: Author-email: Licens…...

MySQL基础篇总结

基本SQL语句分类 DDL(数据定义语言) 数据定义语言,用来定义数据库对象(数据库、表、字段)。 数据控制语言,用来创建数据库用户、控制数据库的控制权限。 数据库操作 查询所有数据库: SHOW DATABASES; 查询当前数据库…...

全面解析:网络协议及其应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 # 全面解析:网络协议及其应用 文章目录 网络协议概述定义发展历程主要优势 主要网络协议应用层协议传输层协议网络层…...

一文了解Java序列化

Java 序列化(Serialization)是将对象的状态转换为字节流,以便将对象的状态保存到文件中或通过网络传输的过程。反序列化(Deserialization)则是将字节流恢复为原始对象。Java 序列化主要通过 Serializable 接口实现。 为…...

【前端基础】CSS基础

目标:掌握 CSS 属性基本写法,能够使用文字相关属性美化文章页。 01-CSS初体验 层叠样式表 (Cascading Style Sheets,缩写为 CSS),是一种 样式表 语言,用来描述 HTML 文档的呈现(美化内容&#…...

Linux之selinux和防火墙

selinux(强化的linux) 传统的文件权限与账号的关系:自主访问控制,DAC; 以策略规则制定特定程序读取特定文件:强制访问控制,MAC SELinux是通过MAC的方式来控制管理进程,它控制的主…...

架构零散知识点

1 数据库 1.1 数据库范式 有一个学生表,主键是学号,含有学生号、学生名、班级、班级名,违反了数据库第几范式? --非主属性不依赖于主键,不满足第二范式 有一个订单表,包含以下字段:订单ID&…...

【从零开始的LeetCode-算法】3254. 长度为 K 的子数组的能量值 I

给你一个长度为 n 的整数数组 nums 和一个正整数 k 。一个数组的 能量值 定义为: 如果 所有 元素都是依次 连续 且 上升 的,那么能量值为 最大 的元素。否则为 -1 。 你需要求出 nums 中所有长度为 k 的子数组的能量值。 请你返回一个长度为 n - k 1…...

跨IDE开发

跨IDE开发:多工具协同最佳实践 🛠️ 在现代软件开发中,不同的开发任务往往需要不同的工具。让我们探讨如何高效地在多个IDE间协同工作! 第一部分:IDE协同开发的基础设施 🏗️ 1. 统一的项目配置 为了确保…...

2020年美国总统大选数据分析与模型预测

数据集取自:2020年🇺🇸🇺🇸美国大选数据集 - Heywhale.com 前言 对2020年美国总统大选数据的深入分析,提供各州和县层面的投票情况及选民行为的可视化展示。数据预处理阶段将涉及对异常值的处理&#xff0…...

C++应用场景开发——学生信息管理系统!!!

C 是一种多功能且高效的编程语言,广泛应用于多种领域。 以下是一些常见的 C 应用场景: 1. 系统软件开发 C 经常用于开发操作系统、文件系统、设备驱动程序和其他底层系统软件。由于其高效的内存管理和性能优势,C 在这些领域非常受欢迎。 …...

Pytorch实现transformer语言模型

转载自&#xff1a;| 03_language_model/02_Transformer语言模型.ipynb | 从头训练Transformer语言模型 |Open In Colab | Transformer语言模型 本节训练一个 sequence-to-sequence 模型&#xff0c;使用pytorch的 nn.Transformer <https://pytorch.org/docs/master/nn.ht…...

Java后台生成指定路径下创建指定名称的文件

1.Java后台生成指定路径下创建指定名称的CSV文件 /*** <生成csv文件>* param filePath 文件路径名称* param fileName 文件名称* param colNameList 标题数据信息* param dataList CSV的文件数据* return filePathfileName* throws*/public static File genera…...

sqlcoder70b模型,如果需要训练或者微调需要什么样的GPU机器

要训练或微调 SQLCoder-70B 这样的大规模模型&#xff0c;需要高性能 GPU 资源。以下是硬件资源的推荐配置&#xff0c;特别是针对内存需求较大的模型&#xff1a; 1. GPU 显存要求 至少 8 张 A100 80GB GPUs&#xff1a;70B 参数模型在微调时需要高显存&#xff0c;80GB A10…...

【Python实战案例】爬虫项目实例(附赠源码)

文章目录 声明安装必要的库项目结构技术细节小结 声明 请您遵守网站的robots文件规定&#xff0c;本文目的只是做学习交流使用&#xff0c;包括多个模块&#xff0c;例如数据存储、日志记录、错误处理、多线程或异步请求 安装必要的库 pip install requests beautifulsoup4 sq…...

PDF多功能工具箱 PDF Shaper v14.6

如今对PDF处理的软件很多都是只是单一的功能。PDF Shaper给你完全不同的体验&#xff0c;因为PDF Shaper是一款免费的PDF工具集合的软件。有了PDF Shaper&#xff0c;你以后再也不用下载其他处理PDF的软件了。PDF Shaper的功能有&#xff1a;合并&#xff0c;分割&#xff0c;加…...

Jupyter Notebook添加kernel的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...