WebRTC通话原理(SDP、STUN、 TURN、 信令服务器)

news2024/11/23 16:54:09

文章目录

    • 1.媒体协商
      • SDP简介
    • 2.网络协商
      • STUN的工作原理
      • TURN工作原理
    • 3.信令服务器
      • 信令服务器的主要功能
      • 信令服务器的实现方式

1.媒体协商

比如下面这个例子 A端与B端要想通信

在这里插入图片描述

  • A端视频采用VP8做解码,然后发送给B端,B端怎么解码?

  • B端视频采用VP9做解码,然后发送给A端,A端怎么解码?

所以要协商媒体信息

所以A端和B端要同时采用对方都支持的编码方式,如上图—使用H264进行解码

有一个专门的协议叫做信令服务器交换会话描述协议(SDP),用于交换连接信息和协调两个端点之间的通信。会话描述协议(SDP)是WebRTC信令过程中的核心部分,它描述了多媒体会话的细节。以下是关于SDP及其在信令过程中的作用的介绍:

SDP简介

SDP(Session Description Protocol)是一种用于描述多媒体会话的格式。它包含了会话的媒体类型、格式、传输协议和网络信息等。SDP在WebRTC中用于协商音视频通话的各种参数,确保两个端点可以兼容并顺利进行通信。

以协商编码格式为例:

媒体描述(m=): 描述媒体类型(如音频、视频)、传输端口、传输协议和格式列表

m=audio 49170 RTP/AVP 0
m=video 51372 RTP/AVP 31

2.网络协商

彼此要了解对方的网络信息,这样才有可能找到一条相互通讯的链路

理想情况下:两台通信的电脑都有自己的私有公网地址,可以直接点对点通信

在这里插入图片描述

实际情况。我们的电脑都是在一个大的局域网里面,需要NAT(网络地址转换),如下所示,图画的比较简陋,实际情况往往不止一层NAT,可能是多层NAT

在这里插入图片描述

为了解决上述问题,需要用到STUN 和 TURN

STUN(Session Traversal Utilities for NAT)是一种用于解决NAT(Network Address Translation)穿越问题的网络协议。NAT通常在局域网和互联网之间进行IP地址转换,从而保护局域网的设备,但它也会导致直接P2P(点对点)通信的困难。STUN协议帮助WebRTC客户端发现其公网IP地址及其在NAT后的端口,从而使P2P通信得以实现。

STUN的工作原理

STUN服务器位于公网上,客户端通过它来确定自己的公网IP地址和端口。STUN的基本工作流程如下:

  1. 客户端发送请求: 客户端向STUN服务器发送一个STUN请求包,通常是通过UDP协议。
  2. STUN服务器响应: STUN服务器收到请求后,提取请求包中的源IP地址和端口,并将其返回给客户端作为响应。
  3. 客户端接收响应: 客户端接收到响应后,解析出其在公网中的IP地址和端口。这些信息可以用于P2P连接的建立。

通过STUN,WebRTC客户端能够知道自己的公网IP地址和端口,从而使得对端能够直接与其通信。

但是STUN并不是每次都能成为得为需要NAT的通话设备分配IP地址,打洞可能打不通,或者带宽不足以支撑发送媒体数据,这个时候就可以使用TURN来做数据转发

TURN工作原理

与STUN不同,TURN不仅用于发现客户端的公网IP地址和端口,还实际参与数据传输。TURN服务器接收客户端的数据,并将其转发到目标客户端。这种方式确保了即使在最复杂的NAT和防火墙环境中,WebRTC通信仍然可以进行。这种方式的带宽由服务器承担

在这里插入图片描述

基本工作流程如下:

  1. 客户端发送请求: 客户端向STUN服务器发送一个STUN请求包,通常是通过UDP协议。
  2. STUN服务器响应: STUN服务器收到请求后,提取请求包中的源IP地址和端口,并将其返回给客户端作为响应。
  3. 客户端接收响应: 客户端接收到响应后,解析出其在公网中的IP地址和端口。这些信息可以用于P2P连接的建立。

通过STUN,WebRTC客户端能够知道自己的公网IP地址和端口,从而使得对端能够直接与其通信。

3.信令服务器

信令服务器在WebRTC中是一个关键组件,它负责在两个端点(如浏览器或应用程序)之间交换必要的连接信息(媒体协商信息,网络连接信息等等),以建立和维护实时通信会话。尽管信令服务器不参与实际的媒体数据传输,但它在连接建立过程中的作用至关重要。

信令服务器的主要功能

  1. 交换SDP(Session Description Protocol)
    • Offer/Answer:当一个端点想要与另一个端点建立连接时,它会创建一个SDP offer,并通过信令服务器发送给另一个端点。另一个端点接收到offer后,生成一个SDP answer,并通过信令服务器返回给第一个端点。这些SDP消息包含了媒体类型、编解码器、带宽等信息,确保两端能够兼容通信。
  2. 交换ICE候选者
    • ICE候选者(Interactive Connectivity Establishment Candidates):为了建立P2P连接,双方需要交换多个网络候选者,以确定最佳的通信路径。信令服务器在这个过程中传递这些候选者信息。
  3. 传递控制消息
    • 通话控制:信令服务器也用于传递其他控制消息,如挂断、静音、解除静音等操作。

信令服务器的实现方式

信令服务器的实现并没有固定的标准,可以使用多种协议和技术。常见的实现方式包括:

  • WebSocket:一种全双工通信协议,特别适合用于实时应用。WebRTC通常使用WebSocket来传递信令消息,因为它能够提供低延迟的双向通信。
  • HTTP/HTTPS:虽然不如WebSocket实时,但可以用于简单的信令实现,特别是当实时性要求不高时。
  • SIP(Session Initiation Protocol):一种用于启动、维护和终止实时会话的协议,常用于VoIP(网络电话)系统中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1936413.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用vscode搜索打开的文件夹下的文件

右键空白处打开命令面板 摁一次删除键,删除掉图中的大于号 这样就能够找到例化的模块,文件具体在哪个位置,然后打开了

pdf怎么压缩的小一点?PDF压缩变小的6种方法(2024全新)

pdf怎么压缩的小一点?首先,PDF文件可以进行压缩。职场文档传阅还是比较建议PDF压缩,PDF文件可以无障碍访问,保持原始文本、图像和表格,无需担心展示效果差异等等优势,成为我们日常工作中不可或缺的一部分。…

Grid Search:解锁模型优化新境界

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

8、添加第三方包

目录 1、安装Django Debug Toolbar Django的一个优势就是有丰富的第三方包生态系统。这些由社区开发的包,可以用来快速扩展应用程序的功能集 1、安装Django Debug Toolbar Django Debug Toolbar位于名列前三的第三方包之一 这是一个用于调试Debug Web应用程序的有…

win_vscode_wsl_ubuntu教程

文章目录 win_vscode_wsl_ubuntu教程 win_vscode_wsl_ubuntu教程 在启用或关闭Windows功能处开启适用于Linux的Windows子系统和虚拟机平台,可能会需要重启电脑 设置wsl # 将wsl2设置为默认版本 C:\Users\Administrator>wsl --set-default-version 2 有关与 WS…

PhantomJs将html生成img|pdf

PhantomJS PhantomJS是一个可编程的无头浏览器,‌它基于WebKit内核,‌通过JavaScript API进行脚本化操作,它对各种web标准有快速和原生化的支持,包括DOM处理、CSS选择器、JSON、Canvas和SVG。‌无头浏览器指的是一个完整的浏览器内…

QT反射内存读写操作

反射内存技术适用于通过以太网、光纤通道或其他串行网络连接计算机或可编程逻辑控制器的应用,尤其在实时交互和高通信要求的系统中表现突出。虽然价格较高,但其易用性和性能优势带来了显著回报。反射内存能够在微秒级内将计算机的内存副本分发到整个网络…

Element UI DatePicker选择日期范围区间默认显示前一个月和本月

要求&#xff1a;点击el-date-picker选择时间范围时&#xff0c;默认展开当月和上个月。 但是Element UI的组件默认展开的是本月和下一个月&#xff0c;如下图所示&#xff1a; 改为 <span click"changeInitCalendarRange"><el-date-picker v-model"r…

QT获取电脑网卡IP等信息

文章目录 一、背景信息二、代码实现 一、背景信息 电脑有一个或者多个网卡&#xff0c;如下图所示&#xff1a; 一个网卡又可以配有多个IP地址&#xff0c;包括 IPv4 和 IPv6 地址&#xff1a; 二、代码实现 以下代码实现了查找电脑所有网卡&#xff0c;并获取某个网卡的 IP …

苹果电脑crossover怎么下载 苹果电脑下载crossover对电脑有影响吗 MacBook下载crossover软件

CodeWeavers 发布了 CrossOver 24 版本更新&#xff0c;不仅兼容更多应用和游戏&#xff0c;得益于 Wine 9.0 带来的 7000 多项改进&#xff0c;CrossOver 还可以在 64 位系统上运行Windows应用的软件&#xff0c;使得用户可以在Mac系统中轻松安装使用仅支持Windows系统运营环境…

ubuntu源码安装Odoo

序言:时间是我们最宝贵的财富,珍惜手上的每个时分 Odoo具有非常多的安装方式&#xff0c;除了我最爱用的 apt-get install&#xff0c;我们还可以使用git拉取Odoo源码进行安装。 本次示例于ubuntu20.04 Desktop上进行操作&#xff0c;理论上在ubuntu14.04之后都可以用此操作。 …

uniapp 小程序 嵌套 webview 返回需要点击两次

uniapp 小程序 嵌套 webview 返回需要点击两次 先 上图 小程序也监听不到 返回事件在网上找了一圈 都没有理想的答案&#xff0c;猜测 是因为嵌入的页面中有问题果然 小程序中嵌入的代码 <view><web-view :src"urlSrc" ></web-view></view>…

【思科】链路聚合实验配置和背景

【思科】链路聚合实验配置和背景 背景链路聚合基本概念链路聚合聚合接口 思科链路聚合协议01.PAgP协议02.LACP协议 思科链路聚合模式LACP协议模式PAgP协议模式ON模式 实验准备配置二层链路聚合LACP协议模式SW1SW2PC1PC2查看LACP聚合组建立情况查看LACP聚合端口情况查看逻辑聚合…

使用github actions构建多平台electron应用

1. 创建electron项目 使用pnpm创建项目 pnpm create quick-start/electron 2. 修改electron-builder.yml文件 修改mac的target mac:target:- target: dmgarch: universal 3. 添加workflow 创建 .github/workflows/main.yml 文件 name: Build/release Electron appon:work…

excel系列(三) - 利用 easyexcel 快速实现 excel 文件导入导出

一、介绍 在上篇文章中&#xff0c;我们介绍了 easypoi 工具实现 excel 文件的导入导出。 本篇我们继续深入介绍另一款更优秀的 excel 工具库&#xff1a;easyexcel 。 二、easyexcel easyexcel 是阿里巴巴开源的一款 excel 解析工具&#xff0c;底层逻辑也是基于 apache p…

独立站外链如何影响搜索引擎排名?

独立站的外链对搜索引擎排名有着非常重要的影响。简单来说&#xff0c;外链就像是别的网站对你的网站投的信任票。每一条外链都告诉搜索引擎&#xff1a;“这个网站的内容是有价值的&#xff0c;值得推荐。”因此&#xff0c;外链的数量和质量直接影响你的网站在搜索引擎中的排…

对称加密与非对称加密

对称加密 对称加密指的是加密和解密使用同一个秘钥,所以叫对称加密。对称加密只有一个秘钥,称为私钥。 优点:算法公开、计算量小、加密速度快、效率高 缺点:数据传输前,发送方和接收方必须确定好秘钥,双方也必须要保存好秘钥。 常见对称加密算法: DES、3DES、AES、3…

Linux云计算 |【第一阶段】ENGINEER-DAY3

主要内容&#xff1a; LVM逻辑卷管理、VDO、RAID磁盘阵列、进程管理 一、新建逻辑卷 1、什么是逻辑卷 逻辑卷&#xff08;Logical Volume&#xff09;是逻辑卷管理&#xff08;Logical Volume Management&#xff0c;LVM&#xff09;系统中的一个概念。LVM是一种用于磁盘管理…

前端组件化探索与实践:Vue自定义暂无数据组件的开发与应用

摘要 随着前端开发技术的不断进步&#xff0c;组件化开发已成为提升开发效率、降低维护成本的关键手段。本文旨在通过介绍一款Vue自定义暂无数据组件的开发与实践&#xff0c;深入探讨前端组件化开发的重要性、优势及其在实际项目中的应用。 一、引言 在前端开发中&#xff0…

【数据结构】堆的实现以及建堆算法和堆排序

【数据结构】堆的实现以及建堆算法和堆排序 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;数据结构 文章目录 【数据结构】堆的实现以及建堆算法和堆排序前言一.堆的实现1.1 堆数据的插入1.2堆数据的删除 二.建堆算法和堆排序2.1思路分析2.…