WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术。这项技术的一大特点就是无需任何插件。得力与Google将其开源(当然也有Google自己的市场战略意义),如今WebRTC已经不仅仅局限于PC的网页浏览器,Android,iOS平台上很多应用都已经采用了这样技术 虽然其名为WebRTC,但是实际上它不光支持Web之间的音视频通讯,还支持Android以及IOS端,此外由于该项目是开源的,我们也可以通过编译C++代码,从而达到全平台的互通。
房间服务器是用来创建和管理通话会话的状态维护,是双方通话还是多方通话,加入与离开房间等等,暂时沿用Google部署在GAE平台上的AppRTC这个房间服务器实现,该GAE App的源码可以在github.com上获取.该实现是一个基于Python的GAE应用,我们需要下载Google GAE的离线开发包到我们自己的Linux服务器上来运行该项目,搭建大陆互联网环境下的房间服务器。
所谓房间(Room),就是把同时参与视频通话的各方圈在一起的一个东西。比如双人通话中,通话中的两个人 A 和 B 就可以认为在一个房间中。再比如在多人通话中,通话中的五个人(A B C D E)也可以认为是在一个房间里。有了房间的概念,那我们就可以对刚才说的状态协同用两个简单的动作描述一下:如果有一个人加入了视频通话,那么就可以理解为他/她已经进房(EnterRoom)了;如果有一个退出了视频通话,那么就可以理解为他/她已经离开房间(LeaveRoom)了。而房间的门板上始终写着:“目前在房间里有哪几个人”
信令就是协调通讯的过程,为了建立一个webRTC的通讯过程,客户端需要交换如下信息
1. 会话控制信息,用来开始和结束通话,即开始视频、结束视频这些操作指令。
2. 发生错误时用来相互通告的消息
3. 元数据,如各自的音视频解码方式、带宽。
4. 网络数据,对方的公网IP、端口、内网IP及端口。
元数据是通过信令服务器中转发给另一个客户端,但是对于流媒体数据,一旦会话建立,首先尝试使用点对点连接。每个客户端都有一个唯一的地址,他能用来和其他客户端进行通讯和数据交换。 一般情况下,连接互联网时都处于防火墙后面或者配置私有子网的家庭路由器后面,导致我们的计算机的IP地址不是广域网IP地址,故而不能相互之间直接通讯。让两个同处于私有网络里的计算机能够通讯起来,这种技术通常称为NAT穿透。WebRTC 可以使用ICE框架去克服真实世界的复杂网络。
1、STUN (Simple Traversal of UDP Through NAT),是一个完整的NAT穿透解决方案,即简单的用UDP穿透NAT。
2、TURN (Traversal Using Relay NAT), 与STUN一样为了完成穿透效果,但是TURN是通过转 发的方式来实现穿透。
3、ICE (Interactive Connectivity Establishment), 综合以上2种协议的综合性NAT穿越解决方案
1、客户端a 绑定NAT 通过线令进入房间 2、客服端b 绑定NAT 通过线令进入房间 3、房间内交流通信