什么是WebRTC?
WebRTC最初是为了在网页浏览器中进行实时通信而建立的。你可以理解为,它是一个支持网页浏览器进行实时语音对话或视频对话的API。
发展由来
Google Chrome 发布后不久,其团队注意到,在进行实时通信时,网页基础设施不足。在当时,浏览器都没有默认提供人与人之间直接进行数据传输的功能,更不用说让所有浏览器都实现标准化操作。
因此 Google 开始着手创建 Web 实时通信的标准化规范,以便在通用平台上顺利进行数据传输,从而消除对第三方应用程序或插件的需求。在随后的几年里,Mozilla、Microsoft、Opera 和 Apple 都加入了该项目。
WebRTC 技术的诞生,有一个很重要的原因在于,在浏览器实现实时音视频通话,需要依赖相关插件或程序,而插件安全漏洞问题则更为关键。浏览器开发人员无法控制这些插件以及更新,因此插件带来的安全风险也相对较大。
例如,Adobe Flash 一直以来以安全性问题闹了不少负面新闻,以至于史蒂夫·乔布斯写了一封公开信,详细说明了为何 iOS 从2010年就禁止了该插件。所以,Adobe 于2015年停用了 Flash,并宣布2020年终止服务。
WebRTC的特点:
- 开源、免费,开发者不需要承担高昂的专利费用。
- 基于浏览器,不需要安装插件,只要调用就可以实现音视频互动。
- 被纳入了HTML5标准,主流浏览器全面支持 WebRTC。
应用场景
如今 WebRTC 已经不仅仅局限于 PC 端的网页浏览器,很多 Android、iOS 应用都已经采用了该技术。这也是为什么近几年课程直播、企业培训、社交娱乐等等领域,视频业务发展迅速。
AI、物联网已经是未来趋势,到2030年,全球预计将有5,000亿台移动互联网设备。我们需要一种快捷便利、低延迟的解决方案来实现实时音视频的传输和处理。
随着移动互联网的高速发展,AI、5G等等新兴技术的到来,结合WebRTC技术,也将衍生出更多的应用场景,改变人类的衣、食、住、行等生活方式。
了解API
我们说 WebRTC 的 RTCPeerConnection 是可以做到浏览器间(无服务)的通信。
但这里有个问题,当两个浏览器不通过服务器建立 RTCPeerConnection 时,它们怎么知道彼此的存在呢?进一步讲,它们该怎么知道对方的网络连接位置(IP/端口等)呢?支持何种编解码器?甚至于什么时候开始媒体流传输、又该什么时候结束呢?
因此在建立 WebRTC 的 RTCPeerConnection 前,必须建立️另一条通道来交这些协商信息,这些也被称为信令,这条通道成为信令通道(Signaling Channel)。
其中主要涉及 SDP(offer、answer) 会话描述协议,以及 ICE candidate 的交换。
一般会使用 websocket 通道来做信令通道,比如可以基于 socket.io 来搭建信令服务。当然业界也有很多开源且稳定成熟的信令服务方案可供选择。
在交换 SDP 后,webrtc 就开始真正的连接来传输音视频数据。这个建立连接的过程相当复杂,原因是 webrtc 既要保证高效的传输性,又要保证稳定的连通性。