实时通讯技术 WebRTC 介绍

news2024/11/18 23:49:25

WebRTC

WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音对话或视频对话的技术。

历史

  1. 2010年5月,Google以6820万美元收购VoIP软件开发商Global IP Solutions的GIPS引擎,并改为名为“WebRTC”。WebRTC使用GIPS引擎,实现了基于网页的视频会议,并支持722,PCM,ILBC,ISAC等编码,同时使用谷歌自家的VP8视频解码器;同时支持RTP/SRTP传输等。
  2. 2011年,Google开源了libwebRTC,这是WebRTC技术发展的重要里程碑
  3. 2013年,Chrome和Firefox之间实现了首次跨浏览器视频通话,这是WebRTC发展史上的一个重要事件。
  4. 2014年,实现了第一次跨浏览器数据传输,这标志着通过客户端进行实时通信的新趋势。
  5. 2021年1月26日,W3C(万维网联盟)和IETF(互联网工程任务组)宣布WebRTC成为正式标准,这标志着WebRTC技术正式成熟并得到广泛认可。
  6. 到了2021年,WebRTC已经被集成到Chrome、Mozilla Firefox、Opera、Safari、Edge、iOS和Android等主流浏览器和操作系统中,成为日常使用的通信技术之一。
    在这里插入图片描述

支持情况

  1. 桌面PC端
    Microsoft Edge、Google Chrome 23、Mozilla Firefox 22、Opera 18、Safari 11(仍处于开发者预览阶段)
  2. Android端
    Google Chrome 28(从版本29开始默认开启)、Mozilla Firefox 24、Opera Mobile 12
  3. Google Chrome OS
  4. Firefox OS
  5. iOS 11
  6. Blackberry 10 内置浏览器
    Bowser

应用

WebRTC技术的应用非常广泛,它允许在网页浏览器之间进行实时的音视频对话,无需安装任何插件或扩展
在线会议和视频通话:WebRTC 可以用于实现在线会议和视频通话功能,如 Google Meet、Zoom 等。

主要应用场景:

  • 远程教育和在线课堂:WebRTC 可以支持教师和学生之间的实时互动,提供远程教育和在线培训服务。

  • 远程医疗服务:医生可以通过 WebRTC 提供远程医疗咨询和在线心理咨询服务。

  • 客户支持系统:WebRTC 可以集成到客户支持系统中,提供实时的视频和语音支持。

  • 社交网络平台:社交平台可以利用 WebRTC 实现用户间的实时音视频聊天功能,如 QQ、微信、Facebook 等。

  • 直播服务:WebRTC 可以用于实现低延迟的直播服务,如 Facebook Live、Twitch 等。

  • 物联网(IoT):WebRTC 可以用于实现物联网设备与浏览器之间的实时通信,进行设备控制和状态同步。

  • 在线游戏:WebRTC 可以支持基于浏览器的多人在线游戏,提供实时的音频和视频通信。

  • 文件共享和数据传输:WebRTC 提供了数据通道(RTCDataChannel)API,可以用于文件共享和实时数据传输。

  • 增强现实(AR)和虚拟现实(VR):WebRTC 可以用于实现 AR 和 VR 应用中的实时通信和数据交换。

  • 云游戏:WebRTC 可以用于云游戏平台,如 Google Stadia,通过浏览器提供低延迟的游戏体验。

  • 远程教育和协作工具:WebRTC 可以用于开发支持实时协作的工具,如共享白板和文档编辑。

相关代码和文档

  • git仓库:https://github.com/webrtc
    在这里插入图片描述
  1. 中文官网:https://webrtc.org/?hl=zh-cn
    在这里插入图片描述
  2. 社区:https://www.rtcdeveloper.cn/cn/community/
    在这里插入图片描述

技术介绍

技术特点

WebRTC(Web Real-Time Communication)技术具有多个显著特点,使其成为现代网页实时通信的首选技术之一。

WebRTC的一些关键技术特点:

  • 实时通讯:WebRTC允许在网页浏览器之间进行实时的音视频通信和数据传输,无需任何插件或额外软件。

  • 无需依赖插件:WebRTC技术允许浏览器直接进行实时通信,无需安装第三方插件或软件,降低了用户的使用门槛。

  • 协议栈众多:WebRTC不是单一的协议,而是由多个协议组成的套件,包括媒体、加密、传输层等协议,以及基于JavaScript的API。

  • 点对点连接:WebRTC支持浏览器之间的点对点(P2P)连接,减少了服务器中转的需要,从而降低了通信延迟并提高了效率。

  • NAT穿透技术:WebRTC使用ICE、STUN和TURN等协议来处理NAT(网络地址转换)穿透问题,使得大多数位于NAT后的用户也能实现P2P通信。

  • 端到端加密:WebRTC支持端到端加密,确保了通信内容的安全性和隐私保护。

  • 跨平台兼容性:WebRTC支持多种操作系统和设备,包括桌面和移动平台,提供了广泛的应用范围和一致的用户体验。

  • 网络适应性:WebRTC能够适应不同的网络条件,包括带宽变化和网络延迟,保持通信的稳定性和流畅性。

  • 开放标准和API:WebRTC是一个开放的API标准,由W3C和IETF等组织进行标准化,确保了不同浏览器和平台之间的互操作性。

  • 媒体流协议支持:WebRTC支持RTP/RTCP等媒体流协议,用于音视频数据的实时传输和控制信息的传递。

  • 数据通道:除了音视频传输,WebRTC还提供了数据通道(RTCDataChannel)API,允许在浏览器之间传输任意类型的数据。

  • 安全性和隐私:WebRTC设计了多种安全机制,包括使用DTLS和SRTP等协议来保护数据传输和媒体流的安全性。

  • 易于集成和使用:WebRTC提供了一套标准、优雅的API,使得开发者可以容易地在浏览器中应用,无需复杂的配置或额外的开发工具。

  • 低延迟:WebRTC在不考虑网络链路的情况下,可以将延时降到100-200毫秒左右,这对于需要实时性的应用场景非常重要。

  • 流量优化:WebRTC基于UDP的传输,协议头小,优化了流量使用,特别是在网络不佳的情况下,通过NACK等机制减少了重传包,提高了传输效率。

源码架构组件介绍

  1. 源码目录
    在这里插入图片描述
  2. 源码核心组件
组件介绍
API 层WebRTC的API层为开发者提供了接口,允许他们通过编程方式访问WebRTC的功能。这包括用于获取用户媒体、建立连接、发送和接收数据等的Web APIs
MediaStreamMediaStream对象在WebRTC中用于表示音频、视频或数据源。它涉及到音频和视频的捕获、编解码以及传输
RTCPeerConnection这是WebRTC中的核心组件,用于建立和管理浏览器之间的对等连接。它包括连接建立、媒体流的传输、编解码以及网络连接管理等功能
RTCDataChannelRTCDataChannel提供了一个在两个WebRTC对等体之间传输任意数据的通道。它支持建立一个可靠的、全双工的通信通道
信令(Signaling)信令是WebRTC中用于在通信对等方之间交换元数据的部分,以建立和管理连接。它通常依赖于WebSocket、HTTP等协议来进行消息的传输
媒体引擎(Media Engine)媒体引擎负责处理音频、视频和数据流的捕获、编码、传输和解码。WebRTC使用特定的编解码器,如VP8/VP9视频编码器和Opus音频编码器
网络传输(Network Transport)网络传输层负责建立和管理通信连接,包括TCP和UDP的实现。WebRTC使用STUN和TURN服务器进行网络地址转换和媒体转发
音频处理(Audio Processing)处理音频流的模块,包括噪声抑制、回声消除等功能
浏览器引擎浏览器引擎负责处理WebRTC的实现,包括音视频捕获、媒体处理和网络传输。它通常包括浏览器提供的接口和库,如Web Audio API、WebRTC Media Engine等
ICE框架交互式连接建立(ICE)框架用于连接管理,通过收集候选网络地址并交换SDP描述信息来建立连接
  1. 原理整体框架

在这里插入图片描述

参考

  • https://zh.wikipedia.org/wiki/WebRTC

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

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

相关文章

C++ ─── 匿名对象+变量的创建顺序

目录 1. 匿名对象(临时对象) 2. 编译器的优化 3.变量的创建与销毁 1. 匿名对象(临时对象) 我们先来看有名对象的创建 Date d1; Date d2(2024,4,27);匿名对象的创建 Date(2024,56,1); 生成了一个匿名对象,执行完Da…

数据仓库是什么

写在前面 刚接触大数据的新手小白可能会对数据仓库这个词比较陌生,本文将介绍数据仓库的主要特征及OLTP&OLAP的区别,帮助读者更好理解数据仓库。 一、什么是数据仓库 数据仓库,简称数仓,是一个对数据进行加工,集…

信息系统项目管理师0073:网路集成(5信息系统工程—5.3系统集成—5.3.2网路集成)

点击查看专栏目录 文章目录 5.3.2网路集成5.3.2网路集成 计算机网络系统集成不仅涉及技术问题,而且涉及组织的管理问题,因而比较复杂,特别是大型网络系统更是如此。从技术角度讲,网络集成不仅涉及不同厂家的网络设备和管理软件,也会涉及异构和异质网络系统的互联问题。从管…

【算法学习】day1

文章目录 双指针算法移动零复写零 双指针算法 移动零 思路:通过定义两个下标作为双指针,cur从开始对整个数组进行遍历,而我们的dest代表的是非零元素的最后一个位置,cur位置为0的时候就cur,不为0元素的时候就交换dest…

STM32单片机C语言模块化编程实战:按键控制LED灯详解与示例

一、开发环境 硬件:正点原子探索者 V3 STM32F407 开发板 单片机:STM32F407ZGT6 Keil版本:5.32 STM32CubeMX版本:6.9.2 STM32Cube MCU Packges版本:STM32F4 V1.27.1 之前介绍了很多关于点灯的方法,比如…

设计模式学习笔记 - 项目实战一:设计实现一个支持各种算法的限流框架(实现)

概述 上篇文章,我们介绍了如何通过合理的设计,来实现框架的功能性需求的同时,满足易用、易扩展、灵活、低延迟、高容错等非功能性需求。在设计的过程中,我们也借鉴了之前讲过的一些开源项目的设计思想。比如 Spring 的低侵入松耦…

【ETAS CP AUTOSAR工具链】RTE层基本概念与开发流程

本篇文章续接上篇文章【ETAS CP AUTOSAR工具链】基本概念与开发流程,继续按上篇文章描述的ETAS CP工具链进行开发的基本框架,讲述了“RTE集成与配置”这部分的基本概念与开发流程。 RTE(Runtime Environment)处于应用层与基础软件…

Web前端开发 小实训(一) 成绩分类统计

用于学生web前端开发课程实训练习,掌握基本语法和数据类型 实训目的 使用分支语句,完成分数统计与等级对比,通过输入框输入分数,可以根据分数多少划分等级。 参考思路: 分析题目:根据输入分数进行等级划分。 操作过…

声光控路灯控制系统设计与仿真

目录 前言 一、设计任务 二、系统组成及工作原理 1、总体设计思路 2、电路各模块设计简介 (1)光控电路 (2)声控电路 (3) 逻辑控制电路 (4) 延时电路 三、系统中电源模块的设计 1、方案比较和确定 2、 设计思路 3、直流…

自定义View-旋转变色圆角三角形的绘制

本文字数:3151字 预计阅读时间:20分钟 在现代设计中,动效图在APP的UI界面中所起到的作用无疑是显著的。相比于静态的界面,动效更符合人类的自然认知体系,它有效地降低了用户的认知负载,UI动效俨然已经成为了…

利用ENVI SPEAR工具和WV-2卫星影像数据量测水深

ENVI的SPEAR工具集((Spectral Processing Exploitation and Analysis Resource))是将很多的遥感图像处理过程集成为流程化的操作方式,使得遥感图像处理知识相对薄弱的非专业人员也能利用流程化的工具进行图像处理,图像处理速度也有…

自动驾驶框架 UniAD环境部署

感谢大佬们的开源工作 UniAD-github地址-YYDS更多bev算法部署参考如果您觉得本帖对您有帮助,感谢您一键三连支持一波^_^ 统一自动驾驶框架 (UniAD) ,第一个将全栈驾驶任务整合到一个深度神经网络中的框架,并可以发挥每个子任务以及各个模块的…

[每周一更]-(第94期):认识英伟达显卡

英伟达显卡:引领图形计算的领先者,显卡也常称为GPU(图形处理器 Graphics processing unit),是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上执行绘图运算工作的…

【STM32+HAL】三轴按键PS2摇杆

一、准备工作: 有关CUBEMX的初始化配置,参见我的另一篇blog:【STM32HAL】CUBEMX初始化配置 有关定时器触发ADC模式配置,详见【STM32HAL】ADC采集波形实现 二、所用工具: 1、芯片: STM32F407VET6 2、CUBE…

大数据面试题 —— Spark数据倾斜及其解决方案

目录 1 调优概述2 数据倾斜发生时的现象3 数据倾斜发生的原理4 如何定位导致数据倾斜的代码4.1 某个 task 执行特别慢的情况4.2 某个 task 莫名其妙内存溢出的情况5 查看导致数据倾斜的 key 的数据分布情况6 数据倾斜的解决方案6.1 使用 Hive ETL 预处理数据6.2 过滤少数导致倾…

Ubuntu中的 Everything 搜索软件 ==> fsearch

本文所使用的 Ubuntu 系统版本是 Ubuntu 22.04 ! 在 Windows 中,我经常使用 Everything 来进行文件搜索,搜索效率比 Windows 自带的高出千百倍。 那么在 Ubuntu 系统中,有没有类似的软件呢?那必须有,它就是 FSearch 。…

JavaScript-Web API基本认知-什么是DOM和BOM

基本认知 var、let、const选用Web API作用和分类什么是DOM什么是DOM树DOM对象(重要)什么是BOM var、let、const选用 var or let or const ? 首先var 先排除,老派写法,问题很多,可以淘汰掉… let or const …

Docker 的数据管理 与 Docker 镜像的创建

目录 一、Docker 的数据管理 1.1.数据卷 1.2.数据卷容器 1.3.容器互联(使用centos镜像) 二、Docker 镜像的创建 2.1.基于现有镜像创建 2.2.基于本地模板创建 2.3.基于Dockerfile创建 2.3.1联合文件系统(UnionFs) 2.3.2…

多线程模型浅谈

优质博文:IT-BLOG-CN 笔者近期在维护的项目中发现了一些比较随机的问题,时有时无的,排查之后发现是使用多线程导致的,恍然之下研究了下多线程的底层模型相关知识,现不大家简要分享下。 一个程序进程可包含多个线程&am…

全志ARM-超声波测距

超声波测距模块是用来测量距离的一种产品,通过发送和收超声波,利用时间差和声音传播速度, 计算出模块到前方障碍物的距离 1.测距原理: 给Trig端口至少10us的高电平发送声波,Echo信号,由低电平跳转到高电平…