WebRTC的认知入门

news2024/11/20 8:38:51

一、学习目的

当前的音视频聊天功能很普通,社会对这方面的需求也很高,疫情期间的在线问诊模式解决类大量急需就医问诊患者的燃眉之急,我们需要了解WebRTC实现实时音视频聊天功能是如何操作的。

二、概念

什么是WebRTC?WebRTC是 Google 在 2010 年以 6820 万美元收购 VoIP 软件开发商 Global IP Solutions 的 GIPS 引擎,并改名为“WebRTC”于 2011 年将其开源的旨在建立一个互联网浏览器之间的音视频和数据实时通信的平台。它提供了实时音视频的核心技术,包含音视频的采集、编解码、网络传输、显示等功能。

三、应用场景

社交软件中的音视频聊天功能,医疗领域的在线问诊、远程会诊的功能,视频互动直播、在线教育等。

四、WebRTC技术组成

紫色部分是Web开发者API层

蓝色实线部分是面向浏览器厂商的API层

蓝色虚线部分浏览器厂商可以自定义实现

架构组件介绍:

1.Your Web App

Web开发者开发的程序,Web开发者可以基于WebRTC的浏览器提供的Web API开发基于音视频的实时通信应用。

2.Web API

面向第三方开发者的WebRTC标准API,使开发者能够简单的开发出类似网络视频聊天的web应用。

3.WebRTC Native C++ API

本地C++ API层,使浏览器厂商容易实现WebRTC标准的WebAPI,抽象对数字信号过程进行处理。 

4.Transport/Session

传输/会话层:会话层组件采用 了libjingle库的部分组件实现,无须使用xmpp/jingle协议。

5.VoiceEngine

音频引擎是包含一系列音频多媒体处理的框架,包括从音频采集到网络传输的整个解决方案。

6.VideoEngine

VideoEngine是包含一系列视频处理的整体框架,从摄像头采集视频到视频信息网络传输再到视频显示整个完整过程的解决方案。

五、WebRTC的P2P通信

P2P通信就是点对点通信。

1.如何发现对方?在P2P通信过程中,双方需要交换一些元数据比如媒体信息、网络数据等信息,我们通常称这个过程叫做“信令”,对应的服务器就是“信令服务器”,通常也有人称为“房间服务器”,因为它不仅可以交换彼此的媒体信息和网络信息也可以管理房间信息。

2.彼此的音视频编解码能力如何沟通?不同浏览器对于音视频编解码能力是不同的,在WebRTC中有一个专门的协议称为SDP,可以用于描述上述信息,参与音视频通信的双方想要了解对方支持的媒体格式,必须交换SDP信息,交换SDP的过程,通常称为媒体协商。

3.音视频如何传输,让对方看到自己?基于网络安全和IPV4地址不够的考虑,我们的电脑和电脑之间或多或少都在某个局域网内,需要NAT(网络地址转换),在WebRTC中我们使用ICE机制建立网络连接。

什么是ICE?

ICE (Interactive Connecctivity Establishment, 交互式连接建立),ICE 不是一种协议,而是整合了 STUN 和 TURN 两种协议的框架。

其中:STUN(Sesssion Traversal Utilities for NAT, NAT 会话穿越应用程序),它允许位于 NAT(或多重 NAT)后的客户端找出自己对应的公网 IP 地址和端口,也就是俗称的P2P“打洞”。

但是:如果 NAT 类型是对称型的话,那么就无法打洞成功。这时候 TURN 就派上用场了,TURN(Traversal USing Replays around NAT)是 STUN/RFC5389 的一个拓展协议在其基础上添加了 Replay(中继)功能。

简单来说:其目的就是解决对称 NAT 无法穿越的问题,在 STUN 分配公网 IP 失败后,可以通过 TURN 服务器请求公网 IP 地址作为中继地址。

在 WebRTC 中有三种类型的 ICE 候选者,它们分别是:

1.主机候选者:表示的是本地局域网内的IP地址和端口,它是三个候选者中优先级最高的,也就是说在WebRTC底层,首先会尝试本地局域网内建立连接。

2.反射候选者:表示的是获取NAT内主机的外网IP地址和端口,它的优先级低于主机候选者,也就是说当WebRTC尝试本地连接不通时,会尝试通过反射候选者获取IP地址和端口进行连接。

3.中继候选者:表示的是中继服务器的IP地址和端口,就是通过服务器中转媒体数据,当WebRTC客户端通信双方无法穿越P2PNAT时,为了保证双方可以正常通讯,此时只能通过服务器中转来保证服务质量了。

 在非本地局域网内WebRTC通过STUN server获得自己的外网IP和端口,然后通过信令服务器与远端的WebRTC交换网络信息,之后双方就可以尝试建立P2P连接类,当NAT穿越不成功时,则会通过Relay server中转。

 

 简单来说就是通过WebRTC提供的API获取各端的媒体信息SDP和网络信息candidate,并通过信令服务器交换,进而建立两端的连接通道完成实现音视频通信。

六、WebRTC的几个常用API

1.音视频采集API

音视频采集 API,即 MediaDevices.getUserMedia()。

2.获取音视频设备输入输出列表

获取音视频设备输入输出列表API,即 MediaDevices.enumerateDevices()。

3.RTCPeerConnection

RTCPeerConnection作为创建点对点连接的API,是我们实现音视频实时通信的关键。

在本文的实践章节中,主要运用到了以下方法。

媒体协商方法:
 

  • createOffer

  • createAnswer

  • localDesccription

  • remoteDesccription

重要事件:

  • onicecandidate

  • onaddstream

在呼叫端和接收端都调用setLocalDescription同时开始收集各端自己的网络信息(candidate),然后各端通过监听事件onicecandidate收集到各自的candidate并通过信令服务器传送给对方,进而打通P2P通信的网络通道,并通过监听onaddstream事件拿到对方的视频流进而完成整个视频通话过程。

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

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

相关文章

开放式耳机是什么意思?开放式耳机和封闭式耳机区别又有哪些?

开放式蓝牙耳机的设计理念旨在为用户提供更加自然、开放的音频体验。与传统的封闭式耳机相比,开放式耳机的设计目的是最大程度地减少音频在耳道中的阻隔,使周围环境的声音与耳机音频混合在一起,创造更加逼真的音场感。 开放式蓝牙耳机非常适合…

6.3.2 可翻页检视

前面提到的 nl 与 cat, tac 等等,都是一次性的将数据一口气显示到屏幕上面。一页一页翻动的指令就是more和less。 more (一页一页翻动) 看到上面的范例,如果more后面接的文件内容行数大于屏幕输出的行数时,就会出现类…

Hello算法笔记之回溯

一、回溯算法介绍:一种通过穷举来解决问题的方法,它的核心思想是从一个初始状态出发,暴力搜索所有可能的解决方案,当遇到正确的解则将其记录,直到找到解或者尝试了所有可能的选择都无法找到解为止。 通常采用「深度优…

【论文阅读】【yolo系列】YOLACT Real-time Instance Segmentation

论文链接:https://arxiv.org/pdf/1904.02689.pdf Abstract 我们提出了一个简单的、全卷积的实时实例分割模型, 【速度和精度】该模型在TitanXp上训练MSCOCO数据集以33.5帧ps的速度达到29.8 mAP,比以往任何竞争方法都要快得多。此外&#xff0…

chatgpt赋能python:Python连接蓝牙模块:实现IoT设备的控制

Python连接蓝牙模块:实现IoT设备的控制 随着物联网技术的不断发展,连接设备的关键变得越来越重要。Python语言是一种灵活易用、快速上手的编程语言,已经成为众多物联网应用的首选编程语言之一。其中,Python连接蓝牙模块的应用越来…

【聚类算法】MeanShift算法

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 MeanShift算法,同样是一种基于密度的聚类算法。两种算法直观理解都比较好理解。 DBSCAN:向身边人逐渐发展下线模式 MeanShfit&…

【Unity 实用插件篇】 | UI适配神器 Device Simulator 移动设备模拟器 的详细使用方法

前言 【Unity 实用插件篇】 UI适配神器 Device Simulator 移动设备模拟器 的详细使用方法一、安装Device Simulator包二、使用Device Simulator模拟各种设备三、自定义设备类型信息 总结 🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由…

windowsVNC远程桌面连接虚拟机

准本环境关闭防火墙 systemct stop firewalld setenforce 0 iptables -F 第一步虚拟机安装VNC yum -y install tigervnc-server 第二步VNC密码 vncserver 查看vnc进程和ID windows客户端 下载 VNC 服务器 |VNC 连接 (realvnc.com)

开始商业太空飞行将推动维珍银河股价上涨

来源:猛兽财经 作者:猛兽财经 总结 (1)维珍银河宣布将在6月底开始商业太空飞行,这将成为该公司的一个重要里程碑事件。 (2)太空旅游飞行市场预计将在未来十年呈指数级增长,维珍银河…

如何在Windows中启用或禁用脱机文件

脱机文件是同步中心的一项功能,即使与服务器的网络连接不可用,用户也可以使用网络文件。 用户可以使用脱机文件(如果启用)使其网络文件始终脱机可用,以便在计算机上保留存储在网络上的文件副本。这使得用户即使在未连接到网络或服务器不可用的情况下也可以与他们一起工作…

ModaHub魔搭社区:详解向量数据库Milvus的Mishards:集群分片中间件(四)

目录 Mishards 简单示例 启动示例 前提条件 启动 Milvus 和 Mishards 实例 使用 docker-compose 启动示例 Mishards 简单示例 启动示例 前提条件 安装 MilvusPython 版本 3.6 及以上 启动 Milvus 和 Mishards 实例 请按照以下步骤在单机上启动单个 Milvus 实例和 Mis…

实现数据的搜索( 筛选 )功能

搜索功能 : 可以根据搜索框对数据进行搜索, 筛选出满足条件的数据, 搜索功能主要还是后端的SQL语句的拼接, 查出满足需求的数据, 再展示给前端 前端 : 在前端我们可以在 ElementUI里获取对应的功能组件 这里与发送到后端的表单数据里的account进行绑定也就是此处我们要用accou…

【AUTOSAR】BMS开发实际项目讲解(十六)----电池管理系统系统电池单体过充保护

系统设计 /System Design 电池单体过充保护 关联的系统需求 TSR-BMS-1101、TSR-BMS-1102、TSR-BMS-1103、TSR-BMS-1104、TSR-BMS-1105、TSR-BMS-1106、TSR-BMS-1106、TSR-BMS-1107、TSR-BMS-1108、TSR-BMS-1109、TSR-BMS-1110、TSR-BMS-1111、TSR-BMS-1112、TSR-BMS-1113、TSR…

50个知识点由浅入深掌握Javascript

前言 近期整理了JavaScript知识体系,50个知识点由浅入深掌握Js建议收藏,如有问题,欢迎指正。 1. 说说你对JS的理解 1995年,布莱登艾奇(美国人)在网景公司,用10天写的一门语言。 Js是一门&…

【ArcGIS】使用ArcMap进行北京1954-120E坐标转WGS84坐标系

背景 在进行青岛地市GIS数据迁移,涉及坐标转换,经过几天摸索终于找到迁移方法 投影坐标系 北京1954-120E坐标 对应为高斯-克吕格投影 300000 3000001 0 0(青岛本地坐标) 增量:-300000 -3000001(此处为示例&#xff0c…

Python print()函数使用详解,Python打印输出

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 print() 可以「打印输出」,常用来将内…

ICV报告:2023年全球量子信息上市企业第一季度报告

ICV分析师在报告中所认定的“上市”,指的是公司公开发行股票(例如IPO)、公司在交易所挂牌交易、公司以SPAC(特殊目的收购公司)等形式进入公开交易市场,实现公司资本化并披露公司信息的情况。 报告研究的“…

预约时间列表

/*** 时间列表* $interval 间隔X分钟* */ function timeList($day7,$time108:00,$time222:00,$interval60){$date_list [];//日期列表$today_date strtotime(date(Y-m-d,time()));for($i0;$i<$day;$i){$date_title date(Y-m-d,$today_date($i*86400));$buff array();for…

MATLAB App Designer基础教程 Matlab GUI入门(二)

MATLAB GUI入门 第二天 —— Lamp (灯)霓虹灯控件的使用 一、主要内容: 技巧 1.Tooltip的使用 2.Vislble和Enable 3.lf函数语句的使用需求&#xff1a;根据阈值进行提示 1.红色温度过高>500 ⒉橙色温度适中400~500 3.蓝色温度过低<400 二、项目背景: &#xff08;案例…

简单的手机记事本哪个好用?

在快节奏的现代生活中&#xff0c;我们经常需要记录下来重要的信息&#xff0c;而手机记事本成为了不可或缺的工具。然而&#xff0c;市面上琳琅满目的手机记事本软件&#xff0c;让人眼花缭乱&#xff0c;不知道该选择哪一个。 敬业签是功能强大、操作简单的手机记事本&#…