webrtc技术详解
WebRTC是一个开源项目,旨在使得浏览器能为实时通信(RTC)提供简单的JavaScript接口。说的简单明了一点就是让浏览器提供JS的即时通信接口。
一、 WebRTC概念
我们都知道浏览器本身不支持相互之间建立信道进行通信,都需要通过服务器进行中转。比如现在有两个客户端—甲、乙,他俩想要进行通信,首先需要甲和服务器、乙和服务器之间建立信道。甲给乙发送消息时,甲先将消息发送到服务器上,服务器对甲的消息进行中转,发送到乙处,反过来也是一样。这样甲与乙之间的一次消息要通过两段信道,通信的效率同时受制于这两段信道的带宽。如何建立浏览器之间的点对点传输,一直困扰着开发者。因此WebRTC应运而生。
WebRTC旨在使得浏览器能为实时通信(RTC)提供简单的JavaScript接口。这个接口所创立的信道并不是像WebSocket一样,打通一个浏览器与WebSocket服务器之间的通信,而是通过一系列的信令,建立一个浏览器与浏览器之间(-to-peer)的信道,这个信道可以发送任何数据,而不需要经过服务器。
二、 WebRTC的功能
① 能用于音视频实时互动,视频会议
② 能用于游戏、即时通讯、文件传输等等
③ 它是一个采集,编码,传输音视频处理(回音消除、降噪等)
三、 WebRTC架构
整体架构分为应用层和核心层。应用层提供实现相关业务逻辑Api,核心层提供应用层需要的核心API。
① 第一层为C++ API,其中最主要的是PeerConnection,这个接口需要重点学习和掌握
② 第二层为Session层,为上下文管理层,应用里的音频和视频及非音视频的数据处理逻辑都可以在这层进行。
③ 第三层为引擎和传输层,包括音频引擎和视频引擎,以及音视频的传输,这也是整个架构中最重要的一层。
④ 第四层与硬件相关,包括音视频的采集和网络的IO。
WebRTC需服务器提供:
① 用户发现以及通信
② 信令传输
③ NAT/防火墙穿越
④ 若P2P通信建立失败可作为中转服务器