WebRTC的RTCPeerConnection()原理探析

2024-05-04 02:58

本文主要是介绍WebRTC的RTCPeerConnection()原理探析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

WebRTC的RTCPeerConnection()原理探析

  • getUserMedia()RTCPeerConnection(),自认为难度陡增。我想一方面是之前在Linux平台上学习ROS调用摄像头时,对底层的外设接口调用、摄像头参数都有学习理解;另一方面是,我们在大三下学期才开始计算机网络的课程学习,对网络通信的理解尚处于未能达到闭环的自闭状态(自闭——"全程自学完成知识闭环")
  • 面对ICE、SDP、NAT gateways、STUN、TURN等词汇异常懵逼(解释可以参考这篇introduction)所以写文如下,增进自己的理解,也为同样对这部分困惑的人提供一份参考

 

目录

  • 写在前面
  • WebRTC P2P的现实物理实现
  • signaling的具体实现过程

 

写在前面

  • 目前,在看过一些WebRTC的资料之后,认为RTCPeerConnection()是最难的但也是最关键的,同样在RTCPeerConnection()中,signaling部分是最难的,但也是最重要的,我想弄清楚这个部分,对WebRTC的各种跨平台搭建会非常有帮助(跨PC、Android、Raspberry Pi)

  • 建立了解基本的计算机网络知识,比如协议架构模型、设备之间的通信所需的基本步骤

  • OK,先忽略各种具体的API,从一个基于现实物理器械的现实角度看看WebRTC的P2P到底怎么实现,参考Lifetime of a WebRTC session

WebRTC P2P的现实物理实现

  • 想必大家都寄过快递,给人寄快递,就是一个很典型的P2P的过程,下面对应WebRTC来讲解一下这个过程
  1. getUserMedia() 把要寄的东西找出来,在WebRTC里面对应的就是获取audio | video,以及对对获取设备的选择、分辨率的设置之类
  2. RTCPeerConnection() 的signaling,类似于选什么快递公司(communication protocols),要寄的东西要不要处理一下形式、要装箱子寄还是塑料袋就好、收到快递打开使用有没有注意事项(media codecs and formats),填好寄到的地址(IP adress and port information),然后快递就可以寄出了

Signaling is the process of sending control information between two devices to determine the communication protocols, channels, media codecs and formats, and method of data transfer, as well as any required routing information.

There are three basic types of information that need to be exchanged during signaling:

  • Control messages used to set up, open, and close the communication channel, and to handle errors.
  • Information needed in order to set up the connection: the IP addressing and port information needed for the peers to be able to talk to one another.
  • Media capability negotiation: what codecs and media data formats can the peers understand? These need to be agreed upon before the WebRTC session can begin.
  1. 通过RTCPeerConnection() 里的一系列API实现上述signaling 过程,这个过程在下一节里面详细分解
  2. 当然寄快递有时候也会出现错误或者碰到异常情况(虽然现实中这种情况我没遇到过),假如是每天都要发一次货物的那种,ICE restart,就是指去找新的发货方式,在找到新的发货渠道之前保持原来的方式,直到找到新的发货方式

signaling的具体实现过程

  • 先放一张示意图(来源)

WebRTC_signaling

  • 理论过程:
  1. Each peer creates an RTCPeerConnection object representing their end of the WebRTC session.
  2. Each peer establishes a handler for icecandidate events, which handles sending those candidates to the other peer over the signaling channel.
  3. Each peer establishes a handler for track event, which is received when the remote peer adds a track to the stream. This code should connect the tracks to its consumer, such as a <video> element.
  4. The caller creates and shares with the receiving peer a unique identifier or token of some kind so that the call between them can be identified by the code on the signaling server. The exact contents and form of this identifier is up to you.
  5. Each peer connects to an agreed-upon signaling server, such as a WebSocket server they both know how to exchange messages with.
  6. Each peer tells the signaling server that they want to join the same WebRTC session (identified by the token established in step 4).
  • 用一个程序的时序图总结一下,时序图链接,这个连接的图片太大,没法粘贴到文章中,但是其中内容准确说明了整个连接的过程

这篇关于WebRTC的RTCPeerConnection()原理探析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/958206

相关文章

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

MyBatis-Plus 与 Spring Boot 集成原理实战示例

《MyBatis-Plus与SpringBoot集成原理实战示例》MyBatis-Plus通过自动配置与核心组件集成SpringBoot实现零配置,提供分页、逻辑删除等插件化功能,增强MyBa... 目录 一、MyBATis-Plus 简介 二、集成方式(Spring Boot)1. 引入依赖 三、核心机制

redis和redission分布式锁原理及区别说明

《redis和redission分布式锁原理及区别说明》文章对比了synchronized、乐观锁、Redis分布式锁及Redission锁的原理与区别,指出在集群环境下synchronized失效,... 目录Redis和redission分布式锁原理及区别1、有的同伴想到了synchronized关键字

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

setsid 命令工作原理和使用案例介绍

《setsid命令工作原理和使用案例介绍》setsid命令在Linux中创建独立会话,使进程脱离终端运行,适用于守护进程和后台任务,通过重定向输出和确保权限,可有效管理长时间运行的进程,本文给大家介... 目录setsid 命令介绍和使用案例基本介绍基本语法主要特点命令参数使用案例1. 在后台运行命令2.

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、