WebRTC通信原理与流程
1、服务器与协议相关
1.1 STUN服务器
图1.1.1 STUN服务器在通信中的位置图
1.1.1 STUN服务简介
STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)是一种网络协议,它允许位于NAT(或多重 NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的 Internet端端口。这些信息被用来在两个同时处于NAT路由器之后的主机之间通信。该协议由RFC 5389定义。
1.1.2 STUN服务的作用
主要是给无法在公网环境下进行通话的设备,分配公网IP用的,其实简单的说来就是告诉客户端的公网IP地址+端口。因为在NAT之后的设备自己是无法知道自己公网的IP和端口的,还有另外一个作用就是找出主机所在NAT的类型,主要会判断出主机所处网络所在是处于完全锥型、地址受限型、端口受限型,NAT对称型,从而找到更合适的通信方案。
1.2 TURN服务器
图1.2-1 TURN服务器在通信中的位置图
1.2.1 TURN服务器简介
TURN的全称为Traversal Using Relays around NAT,是STUN/RFC5389的一个拓展,主要添加了Relay功能。如果 终端在NAT之后, 那么在特定的情景下,有可能使得终端无法和其对等端(peer)进行直接的通信,这时就需要公网 的服务器作为一个中继, 对来往的数据进行转发。这个转发的协议就被定义为TURN。
1.2.2 TURN服务器的作用
当无法建立P2P连接时候,那么就通过TURN服务器来转发媒体数据
1.3 信令服务器
图1.3-1 P2P信令服务器在通信中的位置图
1.3.1 信令服务器简介
作为端对端通信的桥梁,为P2P建立连接,媒体协商,网络协商提供服务,搭在公网上,让局域网内的设备都能访问到,进行通信的交互
1.3.2 信令服务器作用
设备之间的媒体协商(SDP),设备之间的网络协商(Candidate)提供信令交互的通道
1.4 服务器间主要的交互流程图
图1.4-1 端与端,端与服务器间的交互流程
2、ICE Candidate(ICE候选者)
2.1 简介
表示 WebRTC 与远端通信时使用的协议、IP 地址和端口,通常包含以下字段
本地IP地址、本地端口号、候选者类型、优先级、传输协议、访问服务的用户名
2.2 候选者的优先级情况
host(本机候选者)
srflx(内网主机映射的外网地址和端口)
prflx(对等反射候选者)
relay(中继候选者)
host类型是最高优先级的,在WebRTC中,首先对host类型的候选者进行连通性检查,如果他们能够互通,则直接建立连接,其实host类型之间的联通性检测就是内网间的连通性检测
如果host类型无法连接,尝试次优先级的候选者即是srflx类型候选者,然后是prflx
上面3种都不行,那么就会尝试使用relay方式建立连接
优先级: host > srflx > prflx > relay
2.3 收集Candidate
host类型: 即本机内网的IP和端口
srflx类型:即本机NAT映射后的外网的IP和端口
prflx类型:对等反射候选者,通过对端数据包头或者到对端的的地址获取
relay类型: 即中继服务器的IP和端口
2.4 STUN协议
srflx类型的Candidate是通过STURN协议进行收集的,简单来说就是内网主机通过发送STUN消息binding request到STUN服务器,服务器收到请求后,会将请求的IP地址和端口填充到binding response消息中,然后返回给内网主机,内网主机就可以知道自己外网IP和端口。也需要通过STUN协议判断当前网络所处的NAT类型,比如是完全锥形,还是端口限制型,还是地址受限类型,还是对称NAT类型
2.5 TURN协议
也是用STUN协议,只不过协议的类型不一样,比如获取中继的Candidate,会向TURN发送Alllcation指令,relay服务就会在服务端分配一个relay端口,用于中转数据,然后把地址和端口返回给客户端
2.6 ICE
其实ICE就是上面说的获取各种类型的Candidate(候选者)的过程,也就是分为
- 在主机收集所有的host类型的Candidate
- 通过STUN协议获取srflx类型的Candidate
- 通过TURN协议获取relay类型的Candidate
3、通信时序图
3.1 媒体协商时序图
图3.1-1 媒体协商时序图
3.1.1 媒体协商
媒体协商主要用SDP(Session Description Protocal)以文本描述各端(PC 端、Mac 端、Android 端、iOS 端等)的能力, 这里的能力指的是各端所支持的,比如主要有以下内容
- 音视频编解码器是什么,这些编解码器设定的参数是什么,采用什么音视频编码格式
- 使用的传输协议是什么
3.1.2 涉及的通信协议
- Offer信令
- Answer信令
- Candidate信令
3.2 网络协商时序图
图3.2-1 网络协商时序图
3.2.1 网络协商说明
其实上面绘制的没有完全体现媒体协商与网络协商的同步进行,为了提高连接效率,媒体协商跟网络协商应该同步进行在CreatePeerConnection(设置STUN/TURN服务器地址)后进行CreateOffer,在收到webrtc回调Offer信息,webrtc也在进行网络协商,只要通过回调OnCandidate收到网络协商信息,就通过信令服务把Candidate信息发送到对端去。
3.2.2 涉及的通信协议
- Candidate信令
3.3 局域网内端对端通信时序图
图3.3-1 局域网内通信时序图
3.3.1 局域网内通信
如果两个端同在一个局域网内,可以进行直连的,webrtc中的ICE框架会判断两个端是否在同一局域网,然后进行局域网内的通信
3.3.2 涉及的协议
- Candidate信令
3.4 NAT场景P2P连接时序图
图3.4-1 P2P打洞时序图
3.4.1 NAT通信
这种属于两个端之间的P2P的直接连接,是要依靠NAT打洞(P2P穿越),需要借助STUN服务进行协调打洞的过程的,成功率的大小跟设备所处在的NAT类型(完全锥形、地址限制型、端口限制型、完全首先型)有很大的关系,当这种方式失败了,将采用下面的第3种方式,即通过Relay中转的方式进行通信
3.4.2 涉及的协议
- Candidate信令
3.5 通过Relay连接通信时序图
图3.5-1 通过Relay连接通信的时序图
3.5.1 通过Relay连接通信
当P2P穿越失败时候,采用这种中继的方式进行通信交换数据,端侧会向TURN服务器发送,Allocation 指令。通过向 TURN 服务器发送 Allocation 指令,Relay服务就会在服务器端分配一个新的 relay 端口,用 于中转 UDP 数据报.
3.5.2 涉及的协议
- Candidate信令
4、浏览器通信例子
图4-1 浏览器端接入WebRTC的示例图
拿浏览器接入WebRTC来预览设备端视频的例子
- 先http请求从地址服务器上获取信令服务器的地址,STUN/TURN服务器的地址
- 与信令服务器建立WebSocket连接
- 传入STUN/TURN服务器的配置,创建RTCPeerConection(浏览器WebRTC核心类)
- 调用浏览器RTCPeerConection类的接口createOffer
- RTCPeerConection类回调onOffer
- 调用浏览器RTCPeerConection类的接口,setLocalDescriptions
- 从onOffer得到回调的SDP信息转为信令发送到信令服务器
- 浏览器收到Answer,调用浏览器类型RTCPeerConnection类的接口,setRemoteDescription
- RTCPeerConection类回调OnCandidate
- 通过信令服务器发送candidate到对端
- 收到信令服务器发过来的candidate,调用浏览器类型RTCPeerConnection类的接口,addIceCandidate
- 连接成功后收到RTCPeerConection类的onTrack收到流信息
- h5的video标签 设置onTrack返回的流进行播放
相关文章:

WebRTC通信原理与流程
1、服务器与协议相关 1.1 STUN服务器 图1.1.1 STUN服务器在通信中的位置图 1.1.1 STUN服务简介 STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)是一种网络协议,它允许位于NAT(或多重 NAT)…...

Java版ERP管理系统源码(springboot+VUE+Uniapp)
ERP系统是企业资源计划(Enterprise Resource Planning)系统的缩写,它是一种集成的软件解决方案,用于协调和管理企业内各种关键业务流程和功能,如财务、供应链、生产、人力资源等。它的目标是帮助企业实现资源的高效利用…...

Redis总结(六)redis持久化
本文将简单介绍redis持久化的两种方式 redis提供了两种不同级别的持久化方式: RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储.AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保…...
使用FastAPI微服务在AWS EKS中构建上下文增强型AI问答系统
系统概述 本文介绍如何使用FastAPI在AWS Elastic Kubernetes Service (EKS)上构建一个由多个微服务组成的AI问答系统。该系统能够接收用户输入的提示(prompt),通过调用其他微服务从AWS ElastiCache on Redis和Amazon DynamoDB获取相关上下文,然后利用AW…...

PMIC电源管理模块的PCB设计
目录 PMU模块简介 PMU的PCB设计 PMU模块简介 PMIC(电源管理集成电路)是现代电子设备的核心模块,负责高效协调多路电源的转换、分配与监控。它通过集成DC-DC降压/升压、LDO线性稳压、电池充电管理、功耗状态切换等功能,替代传统分…...
正大视角下的结构交易节奏:如何借助数据捕捉关键转折
正大视角下的结构交易节奏:如何借助数据捕捉关键转折 在日常的交易结构研究中,节奏与分型常常被误解为“预测工具”,实则更应作为状态识别的参考。正大团队在模型演化过程中提出了“节奏-结构对齐”的分析方式,通过数据驱动来判断…...

华为云Flexus+DeepSeek征文|DeepSeek-V3商用服务开通教程
目录 DeepSeek-V3/R1商用服务开通使用感受 DeepSeek-V3/R1商用服务开通 1、首先需要访问ModelArts Studio_MaaS_大模型即服务_华为云 2、在网站右上角登陆自己的华为云账号,如果没有华为云账号的话,则需要自己先注册一个。 3、接着点击ModelArts Stu…...
STM32F103RC中ADC1和ADC2通道复用
以下是STM32F103RC中ADC1和ADC2通道复用的示意图及文字说明,帮助直观理解这种共享关系: ADC1/ADC2引脚复用示意图 GPIO引脚 ADC1通道 ADC2通道 ┌─────────┐ ┌─────────┐ ┌─────────┐ │ PA0 ├─…...

Qt—鼠标移动事件的趣味小程序:会移动的按钮
1.项目目标 本次根据Qt的鼠标移动事件实现一个趣味小程序:当鼠标移动到按钮时,按钮就会随机出现在置,以至于根本点击不到按钮。 2.项目步骤 首先现在ui界面设计控件(也可以用代码的方式创建,就不多说了) 第一个按钮不需…...

鞋样设计软件
Sxy 64鞋样设计软件是一款专业级鞋类设计工具 专为鞋业设计师与制鞋企业开发 该软件提供全面的鞋样设计功能 包括二维开版 三维建模 放码排料等核心模块 支持从草图构思到成品输出的完整设计流程 内置丰富的鞋型数据库与部件库 可快速生成各种鞋款模板 软件采用智能放码技术 精…...

LeRobot 项目部署运行逻辑(六)——visualize_dataset_html.py/visualize_dataset.py
可视化脚本包括了两个方法:远程下载 huggingface 上的数据集和使用本地数据集 脚本主要使用两个: 目前来说,ACT 采集训练用的是统一时间长度的数据集,此外,这两个脚本最大的问题在于不能裁剪,这也是比较好…...

Windows Server 2025开启GPU分区(GPU-P)部署DoraCloud云桌面
本文描述在ShareStation工作站虚拟化方案的部署过程。 将服务器上部署 Windows Server、DoraCloud,并创建带有vGPU的虚拟桌面。 GPU分区技术介绍 GPU-P(GPU Partitioning) 是微软在 Windows 虚拟化平台(如 Hyper-V)中…...

TCP套接字通信核心要点
TCP套接字通信核心要点 通信模型架构 客户端-服务端模型 CS架构:客户端发起请求,服务端响应和处理请求双向通道:建立连接后实现全双工通信 服务端搭建流程 核心步骤 创建套接字 int server socket(AF_INET, SOCK_STREAM, 0); 参数说明&am…...

【C】初阶数据结构15 -- 计数排序与稳定性分析
本文主要讲解七大排序算法之外的另一种排序算法 -- 计数排序 目录 1 计数排序 1) 算法思想 2) 代码 3) 时间复杂度与空间复杂度分析 (1) 时间复杂度 (2) 空间复杂度 4) 计…...

高性能Python Web 框架--FastAPI 学习「基础 → 进阶 → 生产级」
以下是针对 FastAPI 的保姆级教程,包含核心概念、完整案例和关键注意事项,采用「基础 → 进阶 → 生产级」的三阶段教学法: 一、FastAPI介绍 FastAPI 是一个现代化的、高性能的 Python Web 框架,专门用于构建 APIs(应…...

Qt QML自定义LIstView
QML ListView组合拳做列表,代码不可直接复制使用,需要小改 先上图看效果 样式1 样式2 样式3 原理:操作:技术点:代码片段: 先上图看效果 样式1 三个表格组合成要给,上下滚动时,三个同时滚动&am…...

C++进阶--红黑树的实现
文章目录 红黑树的实现红黑树的概念红黑树的规则红黑树的效率 红黑树的实现红黑树的结构红黑树的插入变色单旋(变色)双旋(变色) 红黑树的查找红黑树的验证 总结:结语 很高兴和大家见面,给生活加点impetus&a…...

WPF之值转换器
文章目录 目录什么是值转换器IValueConverter接口Convert方法ConvertBack方法 创建和使用值转换器定义转换器类在XAML中使用转换器转换器参数(ConverterParameter) 常用转换器实现布尔值转可见性(BoolToVisibilityConverter)数值转…...
黄金、碳排放期货市场API接口文档
StockTV 提供了多种期货市场的数据接口,包括获取K线图表数据、查询特定期货的实时行情等。以下为对接期货市场的详细接口说明。 一、获取K线图表数据 通过调用/futures/kline接口,您可以获取指定期货合约的历史K线数据(例如开盘价、最高价、…...
云上系统CC攻击如何进行检测与防御?
云上系统遭受CC攻击(Challenge Collapsar,一种针对应用层的DDoS攻击)时,检测与防御需结合流量分析、行为识别和技术手段,以下是核心方法: 一、检测方法 异常流量分析 监控请求量突增&#…...

qml中的TextArea使用QSyntaxHighlighter显示高亮语法
效果图,左侧显示行号,右侧用TextArea显示文本内容,并且语法高亮。 2025年5月8号更新 1、多行文本注释 多行文本注释跟普通的高亮规则代码不太一样,代码需要修改,这里以JavaScript举例。 先制定多行文本注释规则&…...
QuecPython+腾讯云:快速连接腾讯云l0T平台
该模块提供腾讯 IoT 平台物联网套件客户端功能,目前的产品节点类型仅支持“设备”,设备认证方式支持“一机一密”和“动态注册认证”。 BC25PA系列不支持该功能。 初始化腾讯 IoT 平台 TXyun TXyun(productID, devicename, devicePsk, ProductSecret)配置腾讯 IoT…...
RocketMQ 深度解析:架构设计与最佳实践
在分布式系统架构日益复杂的今天,消息中间件作为系统间通信的桥梁,扮演着至关重要的角色。RocketMQ 作为阿里开源的高性能分布式消息中间件,凭借其卓越的性能、丰富的功能以及高可用性,在电商、金融、互联网等众多领域得到广泛应用…...

Transformer编码器+SHAP分析,模型可解释创新表达!
目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基本介绍 基于SHAP分析的特征选择和贡献度计算,Matlab2023b代码实现;基于MATLAB的SHAP可解释Transformer编码器回归模型,敏感性分析方法。 详细介绍 引言 在正向渗透(…...

[特殊字符]适合母亲节的SVG模版[特殊字符]
宝藏模版 往期推荐(点击阅读): 趣味效果|高大上|可爱风|年终总结I|年终总结II|循环特效|情人节I|情人节II|情人节IIII|妇女节I&…...

浅蓝色调风格人像自拍Lr调色预设,手机滤镜PS+Lightroom预设下载!
调色教程 浅蓝色调风格人像自拍 Lr 调色是利用 Adobe Lightroom 软件针对人像自拍照进行后期处理的一种调色方式。它通过对照片的色彩、对比度、亮度等参数进行精细调整,将画面的主色调打造为清新、柔和的浅蓝色系,赋予人像自拍独特的清新、文艺风格&…...

isp流程介绍(yuv格式阶段)
一、前言介绍 前面两章里面,已经分别讲解了在Raw和Rgb域里面,ISP的相关算法流程,从前面文章里面可以看到,在Raw和Rgb域里面,很多ISP算法操作,更像是属于sensor矫正或者说sensor标定操作。本质上来说&#x…...

数巅智能携手北京昇腾创新中心深耕行业大模型应用
当前,AI技术正在加速向各行业深度渗透,成为驱动产业转型和社会经济发展的重要引擎。构建开放协作的AI应用生态体系、推动技术和应用深度融合,已成为行业发展的重要趋势。 近日,数巅智能与北京昇腾人工智能计算中心(北京昇腾创新中…...

【LangChain高级系列】LangGraph第一课
前言 我们今天直接通过一个langgraph的基础案例,来深入探索langgraph的核心概念和工作原理。 基本认识 LangGraph是一个用于构建具有LLMs的有状态、多角色应用程序的库,用于创建代理和多代理工作流。与其他LLM框架相比,它提供了以下核心优…...
增强学习(Reinforcement Learning)简介
增强学习(Reinforcement Learning)简介 增强学习是机器学习的一种范式,其核心目标是让智能体(Agent)通过与环境的交互,基于试错机制和延迟奖励反馈,学习如何选择最优动作以最大化长期累积回报。…...