当前位置: 首页 > 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&…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...