关于webRTC
WebRTC,网页即时通讯(英语:Web Real-Time Communication),是直接在 Web 浏览器内驱动实时通信(语音、视频和任意数据)方法的API。它于2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联盟的W3C推荐标准,并于 2011 年标准化。谷歌开源的一款产品。
简单的说:WebRTC 是一种 HTML5规范,他无需在浏览器中安装任何插件可以在网页内进行实时通信工作的开源技术,它直接在浏览器和设备之间添加实时媒体通信。
到 2016 年,估计安装了 20 亿个可以与 WebRTC 一起工作的浏览器。从流量的角度来看,仅浏览器通信就估计每周传输超过 10 亿分钟和 500 TB 的数据。
WebRTC(Web Real-Time Communication)(网页实时通信)是一个谷歌开源项目,它提供了一套标准API,使Web应用可以直接提供实时音视频通信功能,不再需要借助任何插件。
为什么使用WebRTC
WebRTC的优点
- 跨平台:可以在Web、Android、iOS、Windows、MacOS、Linux环境下运行WebRTC应用
- 实时传输:传输速度快,延迟低,适合实时性要求较高的应用场景
- 音视频引擎:强大的音视频处理能力
- 免插件:不需要安装任何插件,打开浏览器即可使用
- 免费:虽然WebRTC技术已经较为成熟,集成了最佳的音视频引擎和十分先进的Codec,但仍是免费的
- 主流浏览器支持:包括Chrome、Safari、Firefox、Edge等
WebRTC的作用
音视频会议、在线教育、即时通信工具、游戏、人脸识别
如何实现
WebRTC一对一通话原理
WebRTC由四部分组成,分别为两个WebRTC终端、一个信令服务器、一台中继服务器(STUN/TURN)和两个NAT,这是最经典的一对一通信架构。
通话过程需要三个主要步骤分别是:媒体协商、网络协商、建立连接。
媒体协商
首先两个客户端想要创建连接,一般来说需要有一个双方都能访问的服务器来帮助它们交换连接所需要的信息。这个服务器叫做信令服务器。
与服务器建立连接后,通信的双方就可以通过信令服务器彼此交换必要的信息了,比如告诉对方自己的外网IP地址和端口是多少等。
双方交换的媒体数据由SDP(Session Description Protocol,会话描述协议)描述
网络协商
在交换信息之前WebRTC终端还要与STUN/TURN服务器建立连接。这样做的目的是通过STUN/TURN服务器获得各自的外网IP地址和端口。
WebRTC终端拿到自己的外网IP地址和端口后,再通过信令服务器交换给对方。当彼此获得对方地址后,它们就可以尝试NAT穿越,进行P2P连接了。这个过程涉及NAT及ICE协议。
STUN
STUN是指简单UDP穿透NAT,这项技术允许位于NAT后的客户端找出自己的公网IP地址,以及查出自己位于哪种类型的NAT及NAT所绑定的Internet端口。
TURN
TURN是指使用中继穿透NAT,是STUN的一个扩展,主要添加了中继功能。
如果终端在进行NAT之后,在特定的情景下有可能使得终端无法和其他终端进行直接的通信,这时就需要将公网的服务器作为一个中继,对来往的数据进行转发。这个转发采用的协议就是TURN。
建立连接
连接双方通过第三方服务器即信令服务器来交换各自的SDP数据。
连接双方通过STUN协议从STUN服务器那里获取到自己的NAT结构、子网IP和公网IP、端口,即Candidate信息。
连接双方通过第三方服务器来交换各自的Candidate,如果连接双方在同一个NAT下,那它们仅通过内网Candidate就能建立起连接;如果它们处于不同NAT下,就需要通过STUN服务器识别出的公网Candidate进行通信。
如果仅通过STUN服务器发现的公网Candidate仍然无法建立连接,这就需要寻求TURN服务器提供的转发服务,然后将转发形式的Candidate共享。
webRTC可以跨平台
二、webRTC原理与架构
绿色为webRTC核心功能,紫色部分为浏览器提供的js的api层,即浏览器对C++ API做了一层封装
绿色部分,核心层,分为四层:
C++层,PeerConnection对等连接,其中包含很多API:传输质量,传输数据,传输统计报告,音视频设备管理,采集,等
session层,上下文管理
音视频引擎和传输(音频:编码器/防抖动/回音消除和降噪,视频:编码器/防抖动buffer/图像增强,传输:底层UDP,应用层RTP/SRTP/RTCP)
音频的采集和渲染,视频的采集(没有视频渲染,需要浏览器应用层自己做)【虚线部分允许浏览器自己进行重载】
三、webRTC源码目录结构
四、webRTC信令服务器
1.原理
每个公司的业务模型不一样,因此没有统一规范
信令服务器的作用:
信令服务器要传输的信息:
1.SDP
2.网络信息,用于建立p2p
3.具体的业务信息
2.信令服务器实现
建议使用socket.io
为什么使用socket.io
1、socket.io时WebSocket的超集,本身就支持WebSocket的功能
2、信令服务器需要基于TCP协议,因为需要保证可靠性,而WebSocket底层使用的就是TCP协议
3、socket.io本身就带有房间的概念
4、socket.io是跨平台、跨终端、跨语言的,开发方便
五、webRTC传输基本知识
1、NAT(Network Address Translator)
将内网地址转换为公网地址,内网地址无法通讯,通过NAT转换为公网之后,才有通信的可能
2、STUN(Simple Traversal of UDP Through NAT)
充当中介作用,交换两个公网的信息,使得两个公网之间可以建立连接
3、TURN(Traversal Using Relays around NAT)
在云端架设一个服务器,在P2P连接不成功情况下,保证音视频互通
4、ICE(Interactive Connectivity Establishment)
罗列所有通信可能性(STUN、TURN),选择最优解
关于FFMpeg
ffmpeg与webRTC区别
ffmpeg用于处理多媒体文件的编辑,音视频的编解码
webRTC用于处理多网络抖动,丢包评估,回音消除,降噪
关于SIP
SIP(Session initialization Protocol,会话初始协议)是由IETF(Internet Engineering Task Force,因特网工程任务组)制定的多媒体通信协议。
它是一个基于文本的应用层控制协议,用于创建、修改和释放一个或多个参与者的会话。SIP 是一种源于互联网的IP 语音会话控制协议,具有灵活、易于实现、便于扩展等特点。
SIP(Session Initiation Protocol)是一个应用层的信令控制协议。用于创建、修改和释放一个或多个参与者的会话。这些会话可以是Internet多媒体会议、IP电话或多媒体分发。会话的参与者可以通过组播(multicast)、网状单播(unicast)或两者的混合体进行通信。
SIP与负责语音质量的资源预留协议(RSVP)互操作。它还与若干个其他协议进行协作,包括负责定位的轻型目录访问协议(LDAP)、负责身份验证的远程身份验证拨入用户服务 (RADIUS) 以及负责实时传输的 RTP 等多个协议。
随着计算机科学技术的进步,基于分组交换技术的IP数据网络以其便捷性和廉价性,取代了基于电路交换的传统电话网在通信领域的核心地位。SIP协议作为应用层信令控制协议,为多种即时通信业务提供完整的会话创建和会话更改服务,由此,SIP协议的安全性对于即时通信的安全起着至关重要的作用。