WebRTC原理

发布时间 2023-04-21 04:28:26作者: 南柯Dream丶

WebRTC原理

1.1什么是WebRTC

WebRTC(Neb Real-Time Communication)是Google于2010以6829万美元从Global IP Solutions公司购买,并于2011年将其开源,旨在1立一个互联网浏览器问的实时通信的平台,让NebRTC:技术成为H5标准之一。我们看官网(https://webrtc.org)的介绍

 

上图的框架对于不同的开发人员关注点不同:

(1)紫色部分是Wb应用开发者API层

(2)蓝色实线部分是面向浏览器厂商的AP层

(3)蓝色虚线部分刘览器厂商可以自定义实现

1.3 WebRTC发展前景

WebRTC虽然冠以wb”之名,但并不受限于传统互联网应用或浏览器的终端运行环坑。实际上无论终端运行环坑是浏览器、桌面应用、移动设备(Android.或iOS)还是loT设备,只要IP连接可到达且符合NabRTC规范就可以互通。这一点释放了大呈智能终端(或运行在智能终端上的pp)的实时通信能力,打开了许多对于实时交互性要求较高的应用场录的想象空间,警如在线教育、视烦会议、视频社交、远程协助、远程操控等等都是其合适的应用领域。

全球领先的技术研究和咨询公司Technavio.近发布了题为全球网络实时通讯(WebRTC)市场,2017-2021"的报告。报告显示,2017-2021年期间,全球网络实时通信(WebRTC)市场将以34.37%的年均复合增长率增长,增长十分迅速。增长主要来自北美、欧洲及亚太地区。 1.4国内方案厂商

声网、即构科技、环信、融云等公司都在某于WebRTC.二次开发自己的音视频通话方案。

声网htps:ww.agora.io/cn/

即构科技https:www.Zeqo.imM

1.5 WebRTC通话原理

首先思考的问题:两个不同网络环坑的(具备摄像头麦克风多媒体设备的)刘览器,要实现点对点的实时音视频对话,难点在哪里?

1.媒体协商

彼此要了解对方支持的媒体格式

1.A端视频采用VP8做编码,然后发送给B端B端怎么去解码?????

2.BVP9做编码,发给A,A怎么去解码?

比如:Peer-A瑞可支特VP8、H264多种编码格式,而Peer-B瑞支持VP9、H264,要保证二瑞都正确的编解码,最简单的办法就是取它们的交集H264注:有一个专门的协议,称为Session Description Protocol(SDP),可用于描述上述这类信息,在WebRTC中,参与视频通讯的双方必须先交换SDP信息,这样双方才知根知底,而交换SDP的过程,也称为"媒体协商。

2.网络协商

彼此要了解对方的网络情况,这样才有可能找到一条相互通讯的链路

先说结论:(1)获取外网P地址映射:(2)通过信令服务器(signal s8rver)交换"网络信息"

理想的网络情况是每个浏览器的电脑都是私有公网IP,可以直接进行点对点连接。

实际情况是:我们的电脑和电脑之前或大或小都是在某个局域网中,需要NAT(Network Address Translation,F网络地址转换),显示情况如下图:

在解决WebRTC使用过程中的上术问的时候,我们需要用到STUN和TURN。

STUN

STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet喘端口。这些信息被用来在两个同时处于NAT路由器之后的主机之间创建UDP通信。该协议由RFC5389定义。在遇到上述情况的时候,我们可以建立一个STUN服务器,这个服务器做什么用的呢?主要是给无法在公网环境下的视频通话设备分配公网P用的。这样两台电脑就可以在公网P中进行通话。

使用一句话说明STUN做的事情就是:告诉我你的公网IP地址+瑞口是什么。搭社STUN服务器很简单,媒体流传输是按照P2P的方式。那么问题来了,STUN并不是每次都能成功的为需要NAT的通话设备分配P地址的,P2P在传输媒体流时,使用的本地带宽,在多人视频通话的过程中,通话质量的好坏往往需要将据使用者本地的带宽确定。那么怎么办?TURN可以很好的解决这个问题

TURN

TURN的全称为Traversal Using Relays around NAT,是STUN/RFC5389的一个拓展,主要添加了Relay1功能。如果终诺在NAT之后,那么在特定的情景下有可能使得终瑞无法和其对等端(Pee)进行直接的通信,这时就需要公网的服务器作为一个中继,对来往的数据进行转发。这个转发的协议就被定义为 TURN.

在上图的其础上,再架设几台TURN服务器:

在STUN分配公网IP失败后,可以通过TURN服务器话求公网IP地址作为中继地址。这种方式的带宽由服务器端担,在多人视频聊天的时候,本地带宽压力较小,并且,根据Google的说明,TURN协议可以使用在所有的环境中。(单向数据200kbps一对一通话)

以上是NebRTC中经常用到的2个协议,STUN和TURN服务器我们使用coturn开源项目来搭建

补充:ICE跟STUN和TURN不一样,ICE不是一种协议,而是个框架(Framework),它整合了STUN和TURN。coturn开源项目某成了STUN和TURN功能。

打洞不成功 需要经过中继服务器转发数据包

但转发会十分消耗服务器网络资源

上图演示的是如果你没有P2P成功一对一视频通话情况下总共需要消耗的数据

即单向200kb x 4 =800kb

 

在WebRTC中用来描术网络信息的术语叫candidate。

媒体协商sdp

网络协商candidate

 

3.媒体协商+网络协商数据的交换通道

从上面1/2点我们知道了2个客户瑞协商媒体信息和网络信息,那怎么去交换?是不是需要一个中间商去做交换?所以我们需要一个信令服务器(Sgl server)转发彼此的媒体信息和网络信息。

如上图,我们在基于VebRTC APl开发应用(APP)时,可以将彼此的APP连接到信令服务器(Signal Server,一股搭让在公网,或者两喘都可以访问到的局域网),借助信令服务器,就可以实现上面提到的sDP媒休信息及Candidate网络信息交换。

信令服务器不只是交互媒体信息sdp和网络信息candidate,比如:

(1)    房间管理(2)人员进出房间

WebRTC APIs

1.MediaStream一MediaStream用来表示个媒体数据流(通过getUserMedia接口获取),允许你访问输入设备,如麦克风和Web摄像机,该APl允许从其中任意一个获取媒体流。

2.RTCPeerConnection一RTCPeerConnection对像允许用户在两个浏览器之间直接通讯,你可以通过网络将捕获的音频和视频流实时发送到另一个 NebRTC端点。使用这些Api,你可以在本世机器和远程对等点之问创建连接。它提供了连接到远程对等点、维护和监视连接以及在不再需要连接时关闭连接的方法。

5.NAT知识补充

具体NAT打洞的知识在本课程不做进一步的讲解,这里提供些链接给大家做参考:

P2P技术详解():NAT详解一详细原理、P2P简介https://www.cnblogs.com/mlgib/p/8243646.htm

P2P技术详解(二):P2P中的NAT穿越(打洞)方案详解https://www.jianshu.com/p/9bfbcbee0abb

P2P技术详解(三):P2P技术之STUN、TURN、ICE详解https:www.jianshu.com/p/258e7d8be2ba

详解P2P技术中的NAT穿透原理

https://www.jianshu.com/p/f71707892eb2