当前位置: 首页 > 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方法

关闭链接

续更中。。。

http://www.lryc.cn/news/38873.html

相关文章:

  • 数据结构与算法基础(王卓)(16):KMP算法详解(代码实现)
  • 九龙证券|盘前直接腰斩,银行巨头紧急“拔网线”!美股银行股又崩了?
  • 接口优化常用思路
  • 【SpringCloud】SpringCloud面试题整理
  • 一些数据库知识点总结
  • Python unittest 模块
  • Spring - Spring IoC 容器相关面试题总结
  • 顺序表来喏!!!
  • 【H2实践】之 SpringBoot 与 H2 数据交互
  • LeetCode 424. Longest Repeating Character Replacement
  • 建立自己的博客(记录-不推荐)
  • hashmap存储方式 hash碰撞及其解决方式
  • Amazon GuardDuty 的新增功能 – Amazon EBS 卷的恶意软件检测
  • YOLOv7 pytorch
  • JDK自带JVM分析工具
  • IO多路复用--[select | poll | epoll | Reactor]
  • pod的requests、limits解读、LimitRange资源配额、Qos服务质量等级、资源配额管理 Resource Quotas
  • R语言基础(六):函数
  • [C++] 简单序列化
  • Autosar Configuration(十三)SomeIP之配置TCP/IP
  • 滤波算法 | 无迹卡尔曼滤波(UKF)算法及其Python实现
  • IMU 积分的误差状态空间方程推导
  • VirtualBox的克隆与复制
  • 每天5分钟玩转机器学习算法:逆向概率的问题是什么?贝叶斯公式是如何解决的?
  • 游戏闲聊之游戏是怎么赚钱的
  • Redis高频面试题汇总(下)
  • Windows修改Docker安装目录修改Docker镜像目录,镜像默认存储位置存放到其它盘
  • 376. 摆动序列——【Leetcode每日刷题】
  • mgre实验
  • 一文彻底了解Zookeeper(介绍篇)