当前位置: 首页 > news >正文

webRtc概念

webRtc概念

以下的文档整理来自此链接

文档整理了一系列实现web通用接口的ECMAScript APIs ,这些接口是为了支持浏览器或者一些其他实现了实时交换协议的设备进行媒体信息和程序数据交换。

1、实现点对点通信的规范:

  • NAT穿透实现与远端节点链接比如: ICE, STUN, and TURN

  • 发送本地的tracks数据并接受来自远程节点的tracks数据

  • 可以向远程节点发送任何数据

ue4像素流建立的点对点链接是基于浏览器实现的ICE代理服务

2、点对点链接

1、概述

一个单点rtc链接实例允许应用程序与另外的一个单点rtcrtc实例建立点对点的通信,这个链接实例可以是浏览器或者其他实现了相关协议的设备,其中通信依赖于可控制的信息交换(信令通道),但是信令通道的上层实现是多样的,在浏览器中,比如说使用websocket或者 XMLHttpRequest。

ue4像素流使用websocket作为信令通道

2、配置

WebIDL中已经实现了RTCConfiguration接口,看下面的代码:

dictionary RTCConfiguration {sequence<RTCIceServer> iceServers = [];RTCIceTransportPolicy iceTransportPolicy = "all";RTCBundlePolicy bundlePolicy = "balanced";RTCRtcpMuxPolicy rtcpMuxPolicy = "require";sequence<RTCCertificate> certificates = [];[EnforceRange] octet iceCandidatePoolSize = 0;
};

上面是RTCConfiguration的接口对象,里面规定了一些值,这些值需要具体的浏览器厂商或者其他设备厂商来实现,下面跳过乏味的底层术语,开始介绍浏览器端的rtc用法。如果有兴趣可访问这里查看WebIDL接口规范

3、用法

介绍浏览器实现webrtc的接口

3.1 new RTCPeerConnection

Calling new RTCPeerConnection(configuration) creates an RTCPeerConnection object.

当调起 new RTCPeerConnection 时,会创建 RTCPeerConnection 对象。
下面是在Google控制台的打印值
在这里插入图片描述
引用一下原文:

An RTCPeerConnection object has a signaling state, a connection state,an ICE gathering state, and an ICE connection state. These are initialized when the object is created.

可以看到谷歌的实现是符合 RTCPeerConnection 规范的,在这个对象的原型上有以下方法和ICE服务交互, addIceCandidate, setConfiguration, setLocalDescription, setRemoteDescription ,close
文章最后会贴出UE4像素流是如何在谷歌浏览器中利用该对象进行与web端数据交互。

3.1.1 addIceCandidate方法

The addIceCandidate method provides a remote candidate to the ICE Agent

addIceCandidate提供了链接ICE代理的方法,当被调用时,会触发以下流程:

  1. candidate将被视为该方法的参数
  2. RTCPeerConnection 会被视为链接对象
  3. 如果candidate.candidate不是空字符串并且candidate.sdpMidcandidate.sdpMLineIndex是null,则promise会结束操作(reject)并抛出创建失败信息
  4. 返回 chaining 操作
  5. 返回 promise

可以看出addIceCandidate方法是异步操作(promise)

3.1.2 setConfiguration方法

The setConfiguration method updates the configuration of this RTCPeerConnection object

setConfiguration提供了更新 RTCPeerConnection 对象的方法,当被调用时,会触发以下流程:

  1. RTCPeerConnection如果被关闭,抛出无效设置错误
  2. 更新配置信息

该方法需要确保链接没有断开

3.1.3 setLocalDescription方法

The setLocalDescription method instructs the RTCPeerConnection to apply the supplied RTCLocalSessionDescriptionInit as the local description.

该方法会改变本地的媒体信息状态,换言之就是可能会替换正在通信的信息比如改变媒体的格式从mp4到txt,这个改变会同时在进行中的媒体信息和当前的媒体信息发生,如果有一端不支持该媒体类型就会拒绝(reject),可参考此处,setRemoteDescription用来改变远端的媒体信息状态

3.1.4 close方法

关闭链接

续更中。。。

相关文章:

webRtc概念

webRtc概念 以下的文档整理来自此链接 文档整理了一系列实现web通用接口的ECMAScript APIs &#xff0c;这些接口是为了支持浏览器或者一些其他实现了实时交换协议的设备进行媒体信息和程序数据交换。 1、实现点对点通信的规范&#xff1a; NAT穿透实现与远端节点链接比如&a…...

数据结构与算法基础(王卓)(16):KMP算法详解(代码实现)

实现代码的过程中 具体细节、问题&#xff1a; &#xff08;1&#xff09;&#xff1a;关于写Get_next函数的标题&#xff1a; 现象&#xff1a; PPT上写的是&#xff1a; void get_next(SString T, int &next[]) 然而并不能运行&#xff0c;而当我们去掉了引用符号&…...

九龙证券|盘前直接腰斩,银行巨头紧急“拔网线”!美股银行股又崩了?

见证历史了&#xff0c;又有一家银行巨子倒下&#xff1f; 美股银行股团体暴降 上一交易日暴降超60%的硅谷银行持续面对腥风血雨。盘前&#xff0c;硅谷银行跌幅超50%&#xff0c;随后&#xff0c;公司宣布盘前暂停交易&#xff0c;等待刊发消息。 而最新消息显现&#xff0c…...

接口优化常用思路

空间换时间 计算机程序中最大的矛盾是空间和时间的矛盾&#xff0c;那么&#xff0c;从这个角度出发逆向思维来考虑程序的效率问题&#xff0c;我们就有了解决问题的第1招–以空间换时间 合理使用缓存就是一个很好的例子&#xff0c;针对一些频繁使用且不频繁变更的数据&#…...

【SpringCloud】SpringCloud面试题整理

文章目录1、什么是Spring Cloud&#xff1f;2、Spring Cloud和Dubbo的区别3、REST和RPC的区别4、SpringCloud如何实现服务的注册和发现5、什么是服务熔断和服务降级&#xff1f;6、项目中zuul常用的功能7、服务网关的作用8、ribbon和feign区别9、ribbon的负载均衡策略10、简述什…...

一些数据库知识点总结

DB2数据库&#xff1a;从数据库表中第I条记录开始检索J条记录SELECT * FROM (SELECT A.*, ROW_NUMBER() OVER() AS NFROM (SELECT * FROM table_name) AS A)WHERE N > I AND N < J;Oracle数据库&#xff1a;从数据库表中第M条记录开始检索N条记录SELECT * FROM (SELECT R…...

Python unittest 模块

一、Unittest 的几个基本概念 TestCase &#xff1a;要写的具体的测试用例TestSuite&#xff1a; 多个测试用例集合&#xff08;或测试套件/测试集&#xff09;TestLoader&#xff1a;用来加载 TestCase 到 TestSuite中的&#xff08;更通俗一点&#xff0c;就是用来把符合我们…...

Spring - Spring IoC 容器相关面试题总结

文章目录01. Spring IoC 和依赖注入是什么&#xff1f;02. Spring IoC 的优点和缺点分别是什么&#xff1f;03. Spring IoC 有什么作用和功能&#xff1f;04. Spring 依赖注入的方式&#xff1f;05. Spring 构造器注入和 setter 方法注入的区别&#xff1f;06. Spring 依赖注入…...

顺序表来喏!!!

前言&#xff1a;还记得前面的文章&#xff1a;《通讯录的实现》吗&#xff1f;通讯录的完成就借助了顺序表这种数据结构&#xff01;&#xff01;&#xff01;那么今天我们就来介绍我们的顺序表介绍顺序表前&#xff0c;我们来了解一下线性表的概念线性表&#xff1a;线性表&a…...

【H2实践】之 SpringBoot 与 H2 数据交互

一、目标 本文是【H2实践】之认识 H2&#xff0c;【H2实践】之 SpringBoot 整合的后续。前文分别介绍了 H2 及其简单使用&#xff0c;并完成了 H2 与 SpringBoot 的整合。本文将紧接 【H2实践】之 SpringBoot 整合 探索实用 SpringBoot 结合 JPA 通过 web 接口操作 H2 数据库的…...

LeetCode 424. Longest Repeating Character Replacement

LeetCode 424. Longest Repeating Character Replacement https://leetcode.com/problems/longest-repeating-character-replacement/ 题目描述 You are given a string s and an integer k. You can choose any character of the string and change it to any other upperc…...

建立自己的博客(记录-不推荐)

环境安装&#xff1a; w10系统安装 第一步&#xff1a;安装git Git 官网: https://git-scm.com/ 第二步&#xff1a;安装Node.js Node.js官网&#xff1a;https://nodejs.org/zh-cn/ 使用cmd检测&#xff1a; node -v 第三步&#xff1a;安装Hexo Hexo官网&#xff1a;htt…...

hashmap存储方式 hash碰撞及其解决方式

1.Map的存储特点 在Map这个结构中&#xff0c;数据是以键值对&#xff08;key-value&#xff09;的形式进行存储的&#xff0c;每一个存储进map的数据都是一一对应的。 创建一个Map结构可以使用new HashMap()以及new TreeMap()两种方式&#xff0c;两者之间的区别是&#xff1a…...

Amazon GuardDuty 的新增功能 – Amazon EBS 卷的恶意软件检测

亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术&#xff0c;观点&#xff0c;和项目&#xff0c;并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏…...

YOLOv7 pytorch

yolov7主干部分结构图&#xff1a;yolov7主干 yolov7数据集处理代码&#xff1a;yolov7数据集处理代码 yolov7训练参数解释&#xff1a;yolov7训练参数【与本文代码有区别】 yolov7训练代码详解&#xff1a;yolov7训练代码详解 目录 训练自己的训练集 训练自己的训练集 此…...

JDK自带JVM分析工具

一、JDK自带工具盘点&#xff1a; jstat&#xff1a;性能分析-查看gc情况&#xff1b; jmap&#xff1a;内存分析-堆信息&#xff1b; jstack&#xff1a;线程分析-栈信息&#xff1b; jinfo&#xff1a;参数查看及配置&#xff1b; jstatd&#xff1a;启动jvm监控服务。它…...

IO多路复用--[select | poll | epoll | Reactor]

因为在简历上写了netty的项目&#xff0c;因此还是将网络底层的那点东西搞清楚。 首先希望明确的是&#xff0c;BIO、NIO、IO多路复用这是不同的东西&#xff0c; 我会在本文中详细讲出来。 本文参考资料&#xff1a; JAVA IO模型 IO多路复用 select poll epoll介绍 从BIO到epo…...

pod的requests、limits解读、LimitRange资源配额、Qos服务质量等级、资源配额管理 Resource Quotas

前言 环境&#xff1a;k8s-v1.22.17 docker-20.10.9 centos-7.9 目录前言什么是可计算资源CPU、Memory计量单位pod资源请求、限额方式pod定义requests、limits查看节点资源情况pod使用request、limits示例LimitRange限制命名空间下的pod的资源配额Qos服务质量等级资源配额管理…...

R语言基础(六):函数

R语言基础(一)&#xff1a;注释、变量 R语言基础(二)&#xff1a;常用函数 R语言基础(三)&#xff1a;运算 R语言基础(四)&#xff1a;数据类型 R语言基础(五)&#xff1a;流程控制语句 7. 函数 函数是一组完成特定功能的语句。 7.1 内置函数 R语言系统中提供许多内置函数&…...

[C++] 简单序列化

前言 序列化(Serialization) 是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间&#xff0c;对象将其当前状态写入到临时或持久性存储区。以后&#xff0c;可以通过从存储区中读取或反序列化对象的状态&#xff0c;重新创建该对象。 使用 序列化 std::array&…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...