webrtc的RTCPeerConnection使用
背景:
平时我们很少会需要使用到点对点单独的通讯,即p2p,一般都是点对服务端通讯,但p2p也有自己的好处,即通讯不经过服务端,从服务端角度这个省了带宽和压力,从客户端角度,通讯是安全,且快速的,当然有些情况下可能速度并不一定快。那么如何实现p2p呢?
解决办法:
webrtc的RTCPeerConnection就实现了p2p的功能,使用RTCPeerConnection需要理解一些概念,什么是信令,信令交换的过程,信令服务器。
信令
2个设备需要通讯,就需要知道对方的在互联网上的公开地址,一般情况下2个设备都是不会直接拥有一个公网的ip地址,所以他们之间的通讯,就需要如何在公网找到自己的方式,路由信息告诉对方,通常这个信息都是临时的,并非永久,当对方获取到这个信息后,就可以通过网络找到彼此的实际路由路径,从而进行通讯,这个信息就是信令(位置信息)。
信令的交换过程:
假设2个设备,p1要和p2进行通讯
1.p1发起邀请阶段
const offer = await p1.createOffer();//创建邀请信令
await p1.setLocalDescription(offer);//设置为本地信令send(JSON.stringify(offer));//把邀请信令发送给对方,至于怎么发送,一般是需要一个第3方的信令服务器来转发这个信息
2.p2收到邀请阶段
当收到p1发起的有邀请信令offer后
await p2.setRemoteDescription(new RTCSessionDescription(JSON.parse(offer)));//设置为远端的信令const answer = await p2.createAnswer();//创新一个应答信令,告诉p1我的位置
await pc.setLocalDescription(answer);//设置我的位置send(JSON.stringify(answer ));将位置信息发送给p1
3.p1收到应答信息阶段
await p2.setRemoteDescription(new RTCSessionDescription(JSON.parse(answer )));//设置为远端的信令
4.处理onicecandidate事件,确认要不要通讯
await p2.addIceCandidate(new RTCIceCandidate(JSON.parse(candidate)));
完成上述几个阶段,正常来说就能开始通讯了
数据通讯DataChannel的使用
发送端
// 创建PeerConnection对象
const pc = new RTCPeerConnection();// 创建DataChannel
const dataChannel = pc.createDataChannel('myDataChannel');// 监听DataChannel的open事件
dataChannel.onopen = () => {console.log('DataChannel已打开');
};// 监听DataChannel的error事件
dataChannel.onerror = (error) => {console.error('DataChannel错误:', error);
};// 监听DataChannel的close事件
dataChannel.onclose = () => {console.log('DataChannel已关闭');
};// 发送文本消息
function sendMessage(message) {dataChannel.send(message);
}// 发起PeerConnection连接
// ...// 在某个事件触发时调用sendMessage()发送消息
// sendMessage('相关文章:
webrtc的RTCPeerConnection使用
背景: 平时我们很少会需要使用到点对点单独的通讯,即p2p,一般都是点对服务端通讯,但p2p也有自己的好处,即通讯不经过服务端,从服务端角度这个省了带宽和压力,从客户端角度,通讯是安全,且快速的,当然有些情况下可能速度并不一定快。那么如何实现p2p呢? 解决办法: …...
【视觉SLAM十四讲学习笔记】第三讲——Eigen库
专栏系列文章如下: 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵 本章将介绍视觉SLAM的基本问题之一:如何描述刚体在三维空间中的运动? Eigen…...
Ubuntu开机显示recovering journal,进入emergency mode
在一次正常的shutdown -r now之后,服务器启动不起来了,登录界面显示recovering journal,主要报错信息如下所示: /dev/sda2:recovering journal /dev/sda2:Clearn... You are in emergency mode. After logging in, type journalc…...
C++_String增删查改模拟实现
C_String增删查改模拟实现 前言一、string默认构造、析构函数、拷贝构造、赋值重载1.1 默认构造1.2 析构函数1.3 拷贝构造1.4 赋值重载 二、迭代器和范围for三、元素相关:operator[ ]四、容量相关:size、resize、capacity、reserve4.1 size、capacity4.2…...
LeeCode前端算法基础100题(2)- 最多水的容器
一、问题详情: 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:…...
排序算法--归并排序
实现逻辑 ① 将序列每相邻两个数字进行归并操作,形成floor(n/2)个序列,排序后每个序列包含两个元素 ② 将上述序列再次归并,形成floor(n/4)个序列,每个序列包含四个元素 ③ 重复步骤②,直到所有元素排序完毕 void pri…...
【LeetCode:1410. HTML 实体解析器 | 模拟+哈希表+字符串+库函数】
🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…...
基于SSM的公司仓库管理系统(有报告)。Javaee项目
演示视频: 基于SSM的公司仓库管理系统(有报告)。Javaee项目 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring SpringMvc …...
spark数据倾斜的解决思路
数据倾斜是:多个分区中,某个分区的数据比其他分区的数据多的多 数据倾斜导致的问题: 导致某个spark任务耗时较长,导致整个任务耗时增加,甚至出现OOM运行速度慢:主要发生在shuffle阶段,同样的k…...
Python武器库开发-前端篇之html概述(二十八)
前端篇之html概述(二十八) html概述 HTML5是构建Web内容的一种语言描述方式。HTML5是互联网的下一代标准,是构建以及呈现互联网内容的一种语言方式.被认为是互联网的核心技术之一。HTML产生于1990年,1997年HTML4成为互联网标准,…...
安防视频EasyCVR平台太阳能供电+4G摄像头视频监控方案的建设
在工地、光伏、风电站、水库河道等场景中,以及一些偏远地区的项目现场,会存在无网无电情况,大大制约了视频监控系统建设的效率及可行性。在这种场景中,我们也可以通过太阳能供电4G监控摄像机的方案,满足偏远地区无网无…...
12.位运算的性质(异或的性质)
文章目录 异或的性质求异或和问题[421. 数组中两个数的最大异或值](https://leetcode.cn/problems/maximum-xor-of-two-numbers-in-an-array/)[2935. 找出强数对的最大异或值 II](https://leetcode.cn/problems/maximum-strong-pair-xor-ii/) 异或前缀和问题(最..回…...
国标直流充电枪9孔分别啥意思?
DC:直流电源正 DC-:直流电源负 PE:接地(搭铁)S:通讯CAN-H S-:通讯CAN-L CC1:充电连接确认 CC2:充电连接确认 A:12V A-:12V- 以上就是国标直流充电…...
关于 Google AMP 和 SEO
Google 于 2015 年首次推出 AMP,即加速移动页面。借助开源 AMP 框架,网页设计师可以制作快速加载的移动网页。该框架的创建是为了应对使用移动设备访问互联网的个人数量的增加。从那时起,谷歌一直在推动使用 AMP 来增强移动设备上的 SEO 和用…...
【SpringMVC】 对请求的不同响应
前言 本文学习如何运用不同的注解来返回不同的响应. 1.返回静态页面Controller 返回index.html页面 Controller 和 RestController的区别 controller 只有加上这个注解,Spring才会帮我们管理这个代码.后续我们访问时才能访问到. RestController 等同于 Controller ResponseBo…...
SQL进阶学习
1.[NISACTF 2022]join-us sql报错注入和联合注入 过滤: as IF rand() LEFT by updatesubstring handler union floor benchmark COLUMN UPDATE & sys.schema_auto_increment_columns && 11 database case AND right CAST FLOOR left updatexml DATABA…...
邦芒解析:做好职场规划防止跳槽失败
为了防止跳槽进入不适合自己的工作环境,你可以采取以下措施: 1、做好调研:在决定跳槽之前,尽可能了解新公司的情况。这包括公司的文化、工作氛围、发展前景以及团队成员之间的关系等。通过搜索公司网站、阅读员工评价以及与公司内…...
基于springboot实现实习管理系统的设计与实现项目【项目源码+论文说明】计算机毕业设计
基于sprinmgboot实现实习管理系统的设计与实现演示 摘要 随着信息化时代的到来,管理系统都趋向于智能化、系统化,实习管理也不例外,但目前国内仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,…...
【华为OD题库-031】比赛的冠亚季军-java
题目 有N(3<N<10000)个运动员,他们的id为0到N-1,他们的实力由一组整数表示。他们之间进行比赛,需要决出冠亚军。比赛的规则是0号和1号比赛,2号和3号比赛,以此类推,每一轮,相邻的运动员进行比赛&#…...
电脑如何禁止截屏
禁止电脑截屏是一项重要的安全措施,可以保护用户隐私和防止恶意软件的使用。以下是几种禁止电脑截屏的方法: 形式一: 一刀切,全部禁止截屏 可以在域之盾软件后,点击桌面管理,然后选择禁止截屏。就能禁止所…...
佛经之如是我闻
如是我闻 public class SutraPrint {public static void main(String[] args) {System.out.println("《心经》 :色空相即,心无罣碍。");System.out.println("《金刚经》 :诸法梦幻,无住生心。");System.out…...
抖音下载器终极指南:三步实现免费批量下载与直播回放保存
抖音下载器终极指南:三步实现免费批量下载与直播回放保存 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…...
02.YOLO核心技术初探:锚定框与交并比
从环境搭建和基础概念中走出来,现在我们要触碰YOLO最核心的两个技术基石:锚定框和交并比。这两个概念是理解YOLO如何检测物体的关键,也是你从“知道YOLO是什么”迈向“懂得YOLO怎么工作”的第一步。 我们先说交并比,它通常被简称为…...
CentOS 7.9 离线安装 Docker 完整指南【20260425-002篇】
文章目录 一、准备:在能上网的 CentOS 7.9 上下载所有 rpm 1.1 配置 yum 源(阿里) 1.2 下载 Docker 及全部依赖(离线包) 1.3 打包 二、离线机安装(无网) 2.1 解压 2.2 离线安装(关键:用 yum localinstall 自动处理依赖) 三、配置 Docker 系统服务(systemd) 3.1 创建…...
大数据分析专业京东电子数码产品销量评价数据集,数据量大约35000条
大数据分析专业京东电子数码产品销量评价数据集,数据量大约35000条,可以用于做数据分析毕设字段包含:订单编号 用户ID 下单时间 商品一级分类 商品名称 单价 销量(件) 订单总金额 支付方式 收货地区 订单状态 用户评分 用户评价数据详情参考&…...
10分钟搞定QQ签名API:Windows一键部署终极指南
10分钟搞定QQ签名API:Windows一键部署终极指南 【免费下载链接】Qsign Windows的一键搭建签名api 项目地址: https://gitcode.com/gh_mirrors/qs/Qsign 还在为QQ机器人签名服务搭建而烦恼吗?今天我来分享一个超简单的解决方案——Qsign签名API一键…...
FileMeta终极指南:5大技巧让Windows文件元数据管理效率提升300%
FileMeta终极指南:5大技巧让Windows文件元数据管理效率提升300% 【免费下载链接】FileMeta Enable Explorer in Vista, Windows 7 and later to see, edit and search on tags and other metadata for any file type 项目地址: https://gitcode.com/gh_mirrors/fi…...
SAP FI顾问实战:手把手教你用OB13配置总账科目表(附T004表查询与避坑点)
SAP FI模块深度实战:OB13配置总账科目表的核心逻辑与高阶技巧 在SAP FI模块实施过程中,总账科目表(Chart of Accounts)的配置堪称财务数据架构的基石。作为财务数据组织的核心框架,科目表不仅决定了会计科目如何被分类和使用,更直…...
Elasticsearch-Kopf核心功能解析:集群监控、索引管理与快照备份全攻略
Elasticsearch-Kopf核心功能解析:集群监控、索引管理与快照备份全攻略 【免费下载链接】elasticsearch-kopf web admin interface for elasticsearch 项目地址: https://gitcode.com/gh_mirrors/el/elasticsearch-kopf Elasticsearch-Kopf是一款功能强大的El…...
别再傻傻print了!用tqdm给你的Python脚本加个进度条,代码瞬间专业
告别print调试!用tqdm打造专业级Python进度监控系统 在数据处理和批量任务中,我们常常需要监控长时间运行的循环进度。传统print语句虽然简单直接,但会导致终端输出混乱、难以估算剩余时间,更无法在Jupyter等环境中提供优雅的交互…...
