webRtc概念

news2025/1/11 17:12:42

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方法

关闭链接

续更中。。。

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

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

相关文章

WebRTC开源库内部调用abort函数引发程序发生闪退问题的排查

目录 1、初始问题描述 2、使用Process Explorer工具查看到处理音视频业务的rtcmpdll.dll模块没有加载起来 3、使用Dependency Walker工具查看到rtcmpdll.dll依赖的库有问题 4、更新库之后Debug程序启动时就发生异常&#xff0c;程序闪退 5、VS调试时看不到有效的函数调用堆…

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

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

TVS和稳压管的相同点和不同点

大家好,我是记得诚。 文章目录 介绍相同点不同点介绍 TVS和稳压管都是电路中很常用的电子元器件,都是二极管的一个种类。 TVS二极管全称是Transient voltage suppression diode,也叫瞬态电压抑制二极管。 稳压二极管英文名字Zener diode,又叫齐纳二极管。 关于稳压二极…

Jenkins从下载到部署项目的流程

Jenkins安装配置1.1 Jenkins介绍Jenkins 是一款流行的开源持续集成&#xff08;Continuous Integration&#xff09;工具&#xff0c;广泛用于项目开发&#xff0c;具有自动化构建、测试和部署等功能。官网&#xff1a; http://jenkins-ci.org/。Jenkins的特征&#xff1a;开源…

谷粒学院开发(三):统一日志、异常及前端准备工作

特定异常处理 ControllerAdvice public class GlobalExceptionHandler {ExceptionHandler(Exception.class) // 指定出现什么异常会被处理ResponseBody // 为了能够返回数据public R error(Exception e) {e.printStackTrace();return R.error().message("执行了全局异常…

Linux--磁盘存储管理 分区工具 fdisk 分区实操 详解~

上一篇文章介绍了 fdisk 的各个菜单功能&#xff0c;这篇&#xff0c;我们直接实操 管理磁盘 fdisk :分区 &#xff1a; 我们上一篇文章里讲过&#xff0c;上篇文章的 磁盘 /dev/nvme0n1 空间已经满了因此 &#xff0c; 又重新添加了一块儿硬盘~&#xff01;&#xff01;>&g…

传统图像处理之颜色特征

博主简介 博主是一名大二学生&#xff0c;主攻人工智能研究。感谢让我们在CSDN相遇&#xff0c;博主致力于在这里分享关于人工智能&#xff0c;c&#xff0c;Python&#xff0c;爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主&#xff0c;博主会继续更新的&#xff0c…

UML时序图速查——架构设计必备技能

目录 一、时序图概述 二、时序图元素 1. Actor&#xff08;角色&#xff09;& Object&#xff08;对象&#xff09; 2. Lifeline&#xff08;生命线&#xff09; 3. Message&#xff08;消息&#xff09; 4. Combined Fragment&#xff08;组合片段&#xff09; 5. …

【Linux】多线程---线程控制

进程在前面已经讲过了&#xff0c;所以这次我们来讨论一下多线程。前言&#xff1a;线程的背景进程是Linux中资源及事物管理的基本单位&#xff0c;是系统进行资源分配和调度的一个独立单位。但是实现进程间通信需要借助操作系统中专门的通信机制&#xff0c;但是只这些机制将占…

java并发入门(一)共享模型—Synchronized、Wait/Notify、pack/unpack

一、共享模型—管程 1、共享存在的问题 1.1 共享变量案例 package com.yyds.juc.monitor;import lombok.extern.slf4j.Slf4j;Slf4j(topic "c.MTest1") public class MTest1 {static int counter 0;public static void main(String[] args) throws InterruptedEx…

如何科学管理技术团队的研发交付速率?

每当提及「研发效能」&#xff0c;我们都在谈论什么&#xff1f; 研发效能管理要在保证质量的前提下&#xff0c;思考如何更快地向客户交付价值。在管理实践中&#xff0c;效能度量涉及三大维度&#xff1a;交付速率、交付质量、交付价值。 技术团队对内如何优化开发流程&…

STM32实战项目-基本定时器

前言&#xff1a; 通过基本定时器TIM6&#xff0c;让三个LED灯每间隔1s闪烁一次。 目录 1.基本定时器参数配置 1.1框图分析 1.2参数配置 2.软件程序 2.1整体框架 2.2定时器结构体 2.3定时器回调函数 1.基本定时器参数配置 1.1框图分析 TIM6作为基本定时器 它是挂载…

【Linux】-- 线程池

目录 铺垫 内存 线程的角度 线程池 基本代码结构 对于线程池的生产消费的完善 初步实现线程池生产消费 结合日志完善线程池 铺垫 内存 &#xff08;以STL处理方式&#xff0c;引入提供效率的一种思想&#xff09; 通过进行C语言与C语言的学习中&#xff0c;平时我们使…

C语言 深度剖析数据在内存中的存储(2)

本次博客是继上次博客&#xff0c;继续向下剖析数据在内存当中的存储。练习浮点型在内存中的存储练习代码1&#xff1a;int main() {char a -1;signed char b-1;unsigned char c-1;printf("a%d,b%d,c%d",a,b,c);return 0; }1.在本题中首先我们要知道的是%d打印的是有…

【数据结构之树】——什么是树,树的特点,树的相关概念和表示方法以及在实际的应用。

文章目录一、1.树是什么&#xff1f;2.树的特点二、树的相关概念三、树的表示方法1.常规方法表示树2.使用左孩子右兄弟表示法3. 使用顺序表来存储父亲节点的下标三、树在实际的应用总结一、1.树是什么&#xff1f; 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n&…

MatCap模拟光照效果实现

大家好&#xff0c;我是阿赵 之前介绍过各种光照模型的实现方法。那些光照模型的实现虽然有算法上的不同&#xff0c;但基本上都是灯光方向和法线方向的计算得出的明暗结果。 下面介绍一种叫做MatCap的模拟光照效果&#xff0c;这种方式计算非常简单&#xff0c;脱离灯光的计算…

javaWeb核心05-FilterListenerAjax(Axios)json

文章目录Filter&Listener&Ajax1&#xff0c;Filter1.1 Filter概述1.2 Filter快速入门1.2.1 开发步骤1.2.2 代码演示1.3 Filter执行流程1.4 Filter拦截路径配置1.5 过滤器链1.5.1 概述1.5.2 代码演示1.5.3 问题1.6 案例1.6.1 需求1.6.2 分析1.6.3 代码实现1.6.3.1 创建F…

Linux 安装 nginx 详细教程

文章目录Linux 安装 nginx 详细步骤①安装依赖包②下载并解压安装包③安装 nginx④启动 nginx 服务⑤配置 nginx.conf提示&#xff1a;以下是本篇文章正文内容&#xff0c;Linux 系列学习将会持续更新 Linux 安装 nginx 详细步骤 ①安装依赖包 下载模块依赖性 Nginx 需要依赖…

resp无法连接Redis服务的解决方法

在保证Windows主机和Linux虚拟机能够相互ping通的前提下&#xff0c;resp仍无法连接到Linux上的redis服务&#xff0c;那么需要考虑以下原因&#xff1a; Linux防火墙问题&#xff0c;Linux未关闭防火墙&#xff0c;或防火墙未放通6379/tcp端口&#xff1b;redis配置问题&#…

Project ERROR: Unknown module(s) in QT: webenginewidgets

Qt系列文章目录 文章目录Qt系列文章目录前言一、问题定位二、解决方法1.引入WebEngine库2.重新打开工程3. 解决办法&#xff1a;运行结果前言 最近项目中需要用到&#xff1a;Qt中使用cesium三维引擎库&#xff0c;涉及到Qt和和JavaScript之间通信&#xff0c;工程源码报错&am…