WebRTC简介(一)
初识WebRTC
Webrtc是什么?
WebRTC(Web Real-Time Communication)也被称为网络实时通信,是由 Google、Mozilla 和其他公司推动的一个开源项目,它通过 Javascript API 实现无插件的实时通信,以及在不需要中介的情况下在浏览器之间交换任意数据。
WebRTC的优点:
- 开源、免费,开发者不需要承担高昂的专利费用
- 基于浏览器,不需要安装插件,只要调用就可以实现音视频互动
- 被纳入了HTML5标准,主流浏览器全面支持WebRTC
- 不仅支持Web之间的音视频通讯,还支持Android以及IOS端,由于该项目是开源的,我们也可以通过编译C++代码,从而达到全平台的互通
Webrtc诞生的原因?
WebRTC技术的诞生,有一个很重要的原因在于,在浏览器实现实时音视频通话,需要依赖相关插件或程序,而插件安全漏洞问题则更为关键。浏览器开发人员无法控制这些插件以及更新,因此插件带来的安全风险也相对较大。
例如,Adobe Flash一直以来以安全性问题闹了不少负面新闻,以至于史蒂夫·乔布斯写了一封公开信,详细说明了为何iOS从2010年就禁止了该插件。所以,Adobe于2015年停用了Flash,并宣布2020年终止服务。
WebRTC音视频传输是基于点对点传输的,实现简单的 1 对 1 通话场景,需要较少的服务器资源,借助免费的 STUN/TURN 服务器可以大大节约成本开销,到目前为止,几乎所有主要的浏览器都兼容WebRTC,包括谷歌Chrome、苹果Safari、Mozilla Firefox 、QQ浏览器、360浏览器和Microsoft Edge,除了IE浏览器外。
WebRTC 发展
在WebRTC诞生之前,开发实时音视频应用的成本是非常高,需要考虑的技术问题很多,如音视频的编解码,数据传输延时、丢包、网络抖动、回音处理和消除等,如果要兼容浏览器端的实时音视频通信,还需要额外安装插件。当然,可以考虑使用第三方成熟技术,比如当时世界顶级的互联网音视频方案GIPS(Global IP Solutions),支付相应的费用就行。很多知名的应用或者软件服务商也都在用GIPS,如Yahoo,AOL,IBM,SKYPE,QQ等。
- 2011年,谷歌以6820万美元收购GIPS。而且,谷歌不光收购了GIPS,还收购了On2,得到了VPx系列视频编解码器。于是,WebRTC项目诞生,融合了GIPS的音视频引擎、VPx视频编解码器,P2P穿洞技术等,而且将WebRTC开源。
- 经历了6年的时间,2017 年 11 月 2 日 ,W3C WebRTC 1.0 草案正式定稿,WebRTC加入W3C大家族。随后,各大浏览器厂商跟紧支持。根据全球领先的技术研究和咨询公司——Technavio的关于“全球网络实时通信(WebRTC)市场”的研究报显示,自2017-2021年期间,全球网络实时通信(WebRTC)市场,将以34.37%的年均复合增长率增长,可谓十分的迅速。
- WebRTC在2021年1月被W3C和IETF发布为正式标准。
WebRTC项目的愿景:实时通信web化,让WebRTC成为互联网音视频实时通信的规范,让开发者基于此规范快速开发出安全、可靠的应用。未来的音视频实时通信,必定是现代化生产活动中极其重要的板块。以下是WebRTC的部分应用场景:
- 云游戏
- 物联网
- 实时人脸识别
- 音视频会议
- 在线教育
- 即时通讯工具
- P2P网络加速
- 共享远程桌面
- 文件传输工具
WebRTC 原理
两个不同网络环境的(具备摄像头/麦克风多媒体设备的)客户端(浏览器或APP),要实现点对点的实时音视频对话,难点在哪里?
- 双方的音视频编解码?
- 如何发现对方?
- 如何交换数据?
媒体协商
要实现P2P通信,首先需要了解彼此是否都支持相同的媒体能力,WebRTC默认使用V8编解码器,如果要连接的对方不支持V8解码,如果没有媒体协商过程。那么即使连接成功,把视频数据发给对方,对方也无法播放
比如:Peer-A端可支持VP8、H264多种编码格式,而Peer-B端支持VP9、H264,要保证二端都正确的编解码,最简单的办法就是取它们的交集H264
有一个专门的协议 ,称为Session Description Protocol (SDP),可用于描述上述这类信息,在WebRTC中,参与视频通讯的双方必须先交换SDP信息,这样双方才能知根知底,而交换SDP的过程,也称为"媒体协商"。
交换数据
交换数据会通过一个中间服务来完成,在这里,我们称之为信令服务器
在建立P2P连接时,需要交换的信息有:
- 媒体信息
- 网络信息
- 具体业务
- 其它
最理想的场景
然而,在大多数情况下,两个对等端都是各自处于某个局域网之中,相互之间隔着NAT与防火墙
NAT简介
NAT(Network Address Translation)即为网路地址转换协议
- 当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法
- 这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接
- 这种通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用的IP地址空间的枯竭
局域网-->公网
公网-->局域网
网络协商
可以借助STUN服务器.,穿越NAT
那什么是STUN服务器呢?
STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址(ip+port),查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。
在NAT四种主要类型中有三种是可以使用STUN穿透:完全圆锥型NAT、受限圆锥型NAT和端口受限圆锥型NAT。但大型公司网络中经常采用的对称型 NAT(又称为双向NAT)则不能使用STUN穿透,这类路由器会透过 NAT 布署所谓的「Symmetric NAT」限制。也就是说,路由器只会接受之前连线过的节点所建立的连线。
当NAT无法穿越时,就需要用到TURN技术。
TURN的全称为Traversal Using Relays around NAT,如果终端在NAT之后, 那么在特定的情景下,有可能使得终端无法和其对等端(peer)进行直接的通信,这时就需要公网的服务器作为一个中继,对来往的数据进行转发。
加上TURN的场景
可以点对点连接的情况与需要中转的情况(数据来源于Google)
不过在国内大部分局域网无法穿越。