WebRTC 客户端状态机

news2025/1/18 10:48:03

WebRTC 客户端状态机

  • WebRTC 客户端状态机
    • 客户端状态机
    • 客户端加入流程图
    • 客户端离开流程图
    • 端到端连接的基本流程

WebRTC 客户端状态机

客户端状态机

首先我们来看一下客户端的一个状态机,客户端与服务器直接通过信令的一个交互之后自然而然的形成一个状态机:

在这里插入图片描述

最开始的时候状态机是处于初始化状态的,当用户发送了一个join到服务端之后服务端会给它回一个joined消息,客户端在收到joined消息之后就变成了加入状态(joined),这个时候用户是可以离开房间的。当客户端离开的时候会回到初始化或者是离开状态。

当一个用户A处于joined的状态的时候,另外一个用户B又进来了,这时用户A就会变成joined_conn状态,就是加入并且可以与对方进行通话的状态。其中用户A的变化就是通过other_join消息通知的,当他收到other_join的时候它就改变状态从joined到joined_conn,对于后加入的用户B,它还是处于joined这个状态,因为它自己并没有收到other_join这个消息,所以房间这两个人其实是两个不同的状态,用户A是先加入房间的,是joiner_conn状态 ,对于后加入的用户B是joined状态。对于join_conn这个状态的用户它也可离开,当他离开的时候它也处于初始化或者离开状态,这同joined状态的情况是一样的。

如果用户A需要离开房间,离开的时候它会发送一个bye消息给这个现在还在房间中用户B,用户B收到bye这个消息的时候状态变成joined_unbind,它虽然已经在这个房间内,但是由于另外一个用户已经走了,所以他们直接进行通讯的这个连接已经不需要了,那这个时候需要释放这个连接,所以要将peerconnection这个连接中的相应通道全部进行解绑,所以它就处于joined_unbind状态。

如果用户B这个时候处于joined_unbind状态,这时候又有一个新的用户C进入,那么用户B会变成joined_conn状态,而刚进来用户C变成joined的状态。用户B处于join_conn状态的时候,就是说这两个用户直接可以进行通讯了,那么这时候如果用户C在加入后离开了,用户B就回到这个joined_unbind状态。

如果处于joined_unbind状态,也可以离开,那这个时候是房间里一个人都没有了,那都处于初始化和离开状态。

有这样一个状态机之后,客户端与服务器之间就可以进行交互了,以上就是整个房间中各个用户状态的变化的一个状态机。

客户端加入流程图

在这里插入图片描述

首先获取这个音视频数据(本地),但如果不能获取到,那就直接失败了,本次通讯肯定不能完成了。

但是如果能获取到音视频数据(本地)的时候,就要拿到数据之后,再与这个信令服务器进行连接,然后注册相关的信令处理函数,也就是本机可以处理接收到的服务端信息,比如joined加入成功信息。

发送加入房间消息后的分支:

  1. 无论房间中是否有其他用户(或者房间已经满了),都会走这一步:如果有一个用户A加入的房间,那么他首先要设置状态,说我现在已经处于加入的状态,这时候它要创建并绑定媒体流PeerConnection,创建一个我们最终通讯的通道,并且将媒体流绑定,这是用户加入的情况。
  2. 如果房间中原本有另外一个用户B,那B要判断现在的状态,如果他现在是一个未绑定状态,他要创建PeerConnection,可能就要跟对方A进行通讯,并且绑定这个他本地的媒体流到这个PeerConnection后面才能进入相应通讯。如果不是这种状态,B是一个joined状态,那这时B就变成了这个join_conn,说明在这之前它已经创建过PeerConnection,并绑定过本地音视频媒体流了,之后所以就不需要绑定,这时候他只要改变状态,变成了join_conn状态,然后变成join_conn状态之后就开始媒体协商,然后收集这个candidate进行连接性检测,最终传输。
  3. 最后一个分支,就是当这个房间满了,用户C来了(经过分支一)发现房间满了,这时候将C设成离开的状态,并关闭与服务端的连接。注意:因为如果返回full房间满状态,是不会去走分支一的,所以不会去创建peerConnection连接和localStream数据,所以不需要去释放。

客户端离开流程图

在这里插入图片描述

另外还有leave消息,当离开的时候把它分成两种:

  1. 本地自己发送离开消息:先走中间的分支,关闭掉自己的peerconnection,关闭音视频设备(媒体流),然后等待收到服务器端确认已离开的消息,那这时就变成了leaved初始状态,这时候关闭连接就好了。
  2. 对端离开后,对方发送bye消息到本地的时候,本地状态就变成了join_unbind状态,同样也要关闭对应的peerconnection。关闭之后其他用户再加入的时候,当本机收到other_join消息的时候又会重新创建PeerConnection并进行绑定。

端到端连接的基本流程

在这里插入图片描述

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

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

相关文章

分别 使用Eclipse Memory Analyzer(MAT) 和 JProfiler进行分析出内存溢出的类名

背景: 之前一直使用的JProfiler,本次测试,产生的hprof文件挺大,同事说使用jprofiler打不开,让用MAT。 方式1:使用MAT分析 1)jmap生成快照 jps top jstat -gcutil 24755 1000 5 netstat -atu|grep 20002 netstat -tu…

Jackson工具,java对象和json字符串之间的互相转换

一、maven依赖引入jackson <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.5</version></dependency>jackson-databind依赖见下&#xff1a; <depend…

从零开始写 Docker(十三)---实现 mydocker rm 删除容器

本文为从零开始写 Docker 系列第十三篇&#xff0c;实现类似 docker rm 的功能&#xff0c;使得我们能够删除容器。 完整代码见&#xff1a;https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 docker 基本实现有一个大致认识&#xff1a; 核心原理&#xff1a;深…

用webui.sh安装报错No module named ‘importlib.metadata‘

安装sdweb报错&#xff0c;出现No module named importlib.metadata&#xff1a; glibc version is 2.35 Cannot locate TCMalloc. Do you have tcmalloc or google-perftool installed on your system? (improves CPU memory usage) Traceback (most recent call last):File…

什么样的人能上百度词条

百度百科是一个向所有互联网用户开放的平台&#xff0c;任何人都可以创建或编辑词条。然而&#xff0c;并不是所有的人物或事物都能被收录到百度百科中&#xff0c;它有一定的收录标准和审结的关于哪些人或事物能上百度百科的条件和流程。 百度百科的收录标准 知名度和影响力&…

用于YouTube推荐的深度神经网络YouTube DNN

这篇论文是最近参加组会看的一篇新论文&#xff0c;论文虽然是2016年出的论文&#xff0c;但是它是YouTube发表的&#xff0c;且是应用在YouTube这样超级大的平台上的一篇工业界的推荐系统的论文&#xff0c;我读完之后也觉得论文有一些可取之处的&#xff0c;所以和大家分享一…

2024第九届数维杯数学建模论文模板(内附LaTeX+Word)

一年一度的2024年第九届数维杯国赛报名进行中&#xff01;相信很多同学们已经摩拳擦掌蓄势待发了&#xff01; 经历三天比赛&#xff0c;最后提交的论文就是最终答卷&#xff0c;那么一篇数模论文&#xff0c;包括哪些内容呢&#xff1f; 一篇完整的数模论文&#xff0c;包括…

如何控制外部用户访问SAP表的权限

今天搞了一天&#xff0c;我就去找找找啊。我们是IDMC要访问BW的表。 Configure SAP user authorization (informatica.com) 这个informatica上面说要连SAP的数据的话&#xff0c;需要设置这些用户权限。 我也没具体看这两权限对象&#xff0c;这个别人已经设置好了。但是表权…

《探索信息技术中心一体化系统架构:提升企业数字化转型的效率与能力》

在当今数字化时代&#xff0c;信息技术中心&#xff08;IT Center&#xff09;扮演着至关重要的角色&#xff0c;它不仅是企业的技术支撑&#xff0c;更是推动数字化转型的引擎。为了更好地应对日益复杂的业务需求和技术挑战&#xff0c;许多企业开始探索一体化系统架构&#x…

第二篇【AI与传奇开心果系列】Python的AI技术点库案例示例:详解AI工业应用算法原理

AI与传奇开心果系列博文 系列博文目录Python的AI技术点库案例示例系列 博文目录前言一、AI工业应用算法原理介绍二、机器学习在工业领域的应用算法示例代码三、深度学习算法在工业领域应用示例代码四、强化学习在工业领域应用示例代码五、自然语言处理在工业领域应用示例代码六…

【代码随想录】回溯问题之组合

前言 更详细的在大佬的代码随想录 (programmercarl.com) 本系列仅是简洁版笔记&#xff0c;为了之后方便观看 解决的类型问题 组合无序&#xff0c;排列有序 组合切割子集排列&#xff08;强调元素的顺序&#xff09;棋牌问题&#xff08;n皇后&#xff0c;数独&#xff0…

5G工业路由器实现驾考科目三实时监控与远程控制

5G驾考路由器的应用主要体现在智能驾考系统中&#xff0c;其优势包括提高考试安全性、效率和规范性&#xff0c;同时杜绝违规行贿作弊的行为。 在驾考系统中&#xff0c;5G工业路由器是数据传输的桥梁设备。车载设备如摄像头、定位系统、硬盘录像机、传感器等&#xff0c;通过串…

CTF数据安全大赛crypto题目解题过程

CTF-Crypto加密题目内容 下面是一个Base64加密的密文 bXNobnszODdoajM3MzM1NzExMzQxMmo4MGg0bDVoMDYzNDQzNH0原文链接&#xff1a; 数据安全大赛CTF-Crypto题目 - 红客网-网络安全与渗透技术 我们用Python写一个解密脚本&#xff1a; import base64 import time #base64加密…

在Win10中,如何将D盘压缩后产生的未分配空间扩展到C盘,无需重启电脑完成扩容

环境: Windows 10专业版 磁盘管理工具 问题描述: 在Windows 10中,如何将D盘压缩后产生的未分配空间扩展到C盘,无需重启电脑 一般未分配空间不在C盘旁边而是D盘之后,这种磁盘管理器就不能扩展到C盘 用一些工具需要重启电脑如PartAssit,还容易造成蓝屏 解决方案: 在…

bert-NER 转化成 onnx 模型

保存模型 加载模型 from transformers import AutoTokenizer, AutoModel, AutoConfigNER_MODEL_PATH ./save_model ner_tokenizer AutoTokenizer.from_pretrained(NER_MODEL_PATH) ner_config AutoConfig.from_pretrained(NER_MODEL_PATH) ner_model AutoModelForTokenCl…

【基于Ubuntu下Yolov5的目标识别】保姆级教程 | 虚拟机安装 - Ubuntu安装 - 环境配置(Anaconda/Pytorch/Vscode/Yolov5) |全过程图文by.Akaxi

目录 一.【YOLOV5算法原理】 1.输入端 2.Backbone 3.Neck 4.输出端 二&#xff0e;【系统环境】 1.虚拟机的安装与创建 2.安装Ubuntu操作系统 3.环境的配置 3.1.Ubuntu下Anacoda安装以及虚拟环境配置 3.2.Pytorch安装 3.3.Vscode安装 3.4.Yolov5源码及环境获取安装…

深入探索MySQL:成本模型解析与查询性能优化

码到三十五 &#xff1a; 个人主页 在数据库管理系统中&#xff0c;查询优化器是一个至关重要的组件&#xff0c;它负责将用户提交的SQL查询转换为高效的执行计划。在MySQL中&#xff0c;查询优化器使用了一个称为“成本模型”的机制来评估不同执行计划的优劣&#xff0c;并选择…

Windows 跨服务器进行 MYSQL备份脚本

Windows 服务器进行 MYSQL备份的脚本&#xff0c;使用该脚本前&#xff0c;请先测试一下 1、新建一个文本文档 2、将下面代码放入文本文档中&#xff0c;保存退出 echo off :: 命令窗口名 title mysql-bak:: 参数定义 set "Y%date:~,4%" set "m%date:~5,2%&qu…

深入理解网络原理5----HTTP协议

文章目录 一、HTTP协议格式二、HTTP请求2.1 URL 基本格式2.2 URL encode2.3 "方法" (method)2.4 认识请求 "报头" (header) 三、HTTP 响应3.1 "状态码" (status code) 四、HTPPS工作过程&#xff08;经典面试题&#xff09; 提示&#xff1a;以下…

数据结构——希尔排序

基本思想&#xff1a; 希尔排序法又称缩小增量法。希尔排序法的基本思想是&#xff1a;先选定一个整数&#xff0c;把待排序文件中所有记录分成个组&#xff0c;所有距离为的记录分在同一组内&#xff0c;并对每一组内的记录进行排序。然后&#xff0c;取&#xff0c;重复上述…