WebRTC
2015-02-08 10:57:02 阿炯

WebRTC是一项在浏览器内部进行实时视频和音频通信的技术,是谷歌2010年以6820万美元收购收购Global IT Solutions公司而获得一项技术。即网页实时通信(英语:Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API。它于2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联盟的W3C推荐标准。它由用于 Web 实时通信的 JavaScript API 和一组通信协议构成,支持网络上的任何已连接设备成为 Web 上潜在的通信端点。WebRTC 已成为线上通信及协作服务的基石。




WebRTC is a free, open project that provides browsers and mobile applications with Real-Time Communications (RTC) capabilities via simple APIs. The WebRTC components have been optimized to best serve this purpose.

Our mission: To enable rich, high quality, RTC applications to be developed for the browser, mobile platforms, and IoT devices, and allow them all to communicate via a common set of protocols.

The WebRTC initiative is a project supported by Google, Mozilla and Opera, amongst others. This page is maintained by the Google Chrome team.

谷歌在官方博客中称:“我们希望让浏览器成为实时通信的创新地所在,到目前为止,实时通信需要使用受版权保护的信号处理技术,并通过插件或下载客户端才能实现,而WebRTC则允许开发人员使用HTML和JavaScript API来创建实时应用。”谷歌码同时还称:“为此我们将与Mozilla和Opera等浏览器厂商密切合作,以便让更广泛的Web社区来部署这项技术。此外,我们还将与IETF和W3C工作组等标准机构合作,以定义一套实时通信标准。”

2012年1月,Google已经把这款软件集成到Chrome浏览器中,同时FreeSWITCH项目宣称支持iSAC audio codec。

如今WebRTC已广泛用于视频通话,但它的功能还不止如此。WebRTC也是完全免费的,它是已嵌入到浏览器中的开源项目,但是你可以根据自己的需要采用它。反过来,当前已经围绕WebRTC创建了一个充满活力和动态的生态系统,围绕着各种开源项目和框架以及科技公司的软件来帮助你构建自己创意想法。WebRTC技术已经较为成熟,其集成了最佳的音/视频引擎,十分先进的代码栈,但是Google对于这些技术不收取任何费用。强大的穿透能力,包含了使用STUN、ICE、TURN、RTP-over-TCP的关键NAT和防火墙穿透技术,并支持代理。

WebRTC在顶部带有一个Javascript API层,可以在浏览器中使用它,这使得在任何地方开发和集成实时通信变得更加容易。在内部,WebRTC仍主要使用C/C++实现,但是大多数使用WebRTC的开发人员无需深入研究这些层即可开发其应用程序。也可以将其集成到应用程序或嵌入式设备中,这样就不需要浏览器。WebRTC的作用是允许访问设备,可以访问设备的麦克风,手机或笔记本电脑上的摄像头,也可以是屏幕本身;可以捕获用户的显示,然后远程共享或记录该屏幕。WebRTC不仅限于语音和视频,它允许发送任何类型的任意数据。它已经围绕着不同的供应商和公司创建了一个充满活力的生态系统,可以为应用提供帮助。比如,基于开源WebRTC技术开发的EasyRTC视频会议云服务,广泛应用在教育、金融、医疗健康、企业培训、远程办公等场景。


2021年1月26日,W3C(万维网联盟)和 IETF (互联网工程任务组)同时宣布 WebRTC(Web Real-Time Communications,Web 实时通信)现发布为正式标准,将音视频通信带到 Web 上任何地方。目前全球都面临着 COVID-19 疫情,WebRTC 让数十亿人无论其设备或地域如何,在疫情期间也能保持联络。WebRTC 的使用已经超越了最初的核心设计,即在浏览器和其他生态(例如本地应用)中支持视频会议和协作系统。现在需要更多的特性和优化。

IETF WebTransport (WEBTRANS) 和 WebRTC Ingest Signaling over HTTPS (WISH) 工作组已经在开展工作,在 IETF 其他工作组的基础上进一步协调、拓展相关工作。其中包括 QUIC(定义支持 WebTransport API 开发的新协议)和 HTTPBIS(指定简单、可扩展的、基于 HTTPS 的信令协议),以在广播工具和实时媒体广播网之间建立基于 WebRTC 的单向视听会话。W3C WebRTC 工作组已经开始研究 WebRTC Next Version Use Cases,规划 WebRTC 的未来,特别是:
在服务器介导的视频会议中的端到端加密
即时处理音视频材料,包括通过机器学习
物联网(例如 IoT 传感器维持长期连接并寻求最小功耗)

WebRTC 工作组正对现有及新的用例进行迭代,重点理解全部需求及其优先级。W3C 近期开始的 WebTransport 和 Web Codecs 工作预计将低延迟流媒体的优势引入更广大的媒体和娱乐生态系统。它已经成为 W3C 为应用程序开发定义开放 Web 平台的众多标准之一,具有前所未有的潜力。其让开发人员能够构建丰富的交互体验,由巨大的数据存储提供动力,可用于任何设备以及环境。

WebRTC 标准文档可见此处


组件

视频引擎(VideoEngine)
音效引擎(VoiceEngine)
会议管理(Session Management)
iSAC:音效压缩
VP8:Google自家的WebM项目的视频编解码器
APIs(Native C++ API, Web API)

重要API

WebRTC原生APIs文件是基于WebRTC规格书撰写而成,这些API可分成Network Stream API、 RTCPeerConnection、Peer-to-peer Data API三类。

Network Stream API
MediaStream:MediaStream用来表示一个媒体数据流。
MediaStreamTrack在浏览器中表示一个媒体源。

RTCPeerConnection
RTCPeerConnection:一个RTCPeerConnection对象允许用户在两个浏览器之间直接通讯。
RTCIceCandidate:表示一个ICE协议的候选者。
RTCIceServer:表示一个ICE Server。

Peer-to-peer Data API
DataChannel:数据通道(DataChannel)接口表示一个在两个节点之间的双向的数据通道。

WebRTC 无疑推动和改变了互联网视频,而这仅仅是刚刚开始,除了大家熟悉的 WebRTC-PC、Simulcast 和 SVC,有太多的新技术和新架构出现在 WebRTC 新的标准中,比如 WebTransport、WebCodecs、AV1、E2EE、SFrame、ML 等等。


W3C WebRTC 工作组的主要工作包括以下三个方面:
1、目前最重要的工作,是完成 WebRTC Peer Connection (WebRTC-PC) 标准化,以及相关的标准比如 WebRTC-Stats。

2、Capture,Streams 和 Output 相关的标准,包括 Media Capture and Streams,Screen Capture,Media Capture from DOM Elements,MediaStream Image Capture,MediaStream Recording,Audio Output Devices,以及 Content-Hints。

3、下一代 WebRTC,也就是 WebRTC-NV。

WebRTC-NV 是下一代 WebRTC,在当前 WebRTC 1.0 之后的标准。WebRTC-NV 的工作主要是四个方面:

第一类是对 WebRTC PeerConnection 的扩展。这包括 WebRTC Extensions, WebRTC-SVC, 以及 Insertable Streams。我特别强调这些工作都依赖于 “Unified Plan”,现在已经是默认的 SDP 规范了。例如,如果要使用 Insertable Streams 来支持 E2EE (End-to-End Encryption,端到端加密),那么首先要支持 “Unified Plan”。

第二类,和 WebRTC-PC 相比,还不够成熟和完善,比如 WebRTC Identity,WebRTC Priority Control 和 WebRTC DSCP。

第三类是对 Capture 的扩展,比如 MediaStreamTrack Insertable Streams,Media Capture and Streams Extensions,和 MediaCapture Depth Stream Extensions。

第四类是独立的标准,它们没有必要依赖 RTCPeerConnection 或者 Media Capture。比如 WebRTC-ICE,目前就是独立的标准。有些标准不是 W3C WebRTC 小组定义的,比如 WebTransport,由 W3C WebTransport 小组定义;WebRTC-QUIC,由 ORTC 小组定义;WebCodecs,由 WICG 定义。


WebTransport 是一组 API,由 W3C WebTransport 组定义的;同时,WebTransport 也是一系列的协议,由 IETF 定义的。这些协议包括 WebTransport over QUIC,简称 QUIC Transport;也包括 WebTransport over HTTP/3,也可能 HTTP/2。因此,WebTransport 的 API 不仅仅支持 QUIC,也支持 HTTP/3,以及 HTTP/2(主要考虑 Fail-over 的回退)。 WebTransport 的 API 是一个 CS 模型的 API,构造和函数都很像 WebSocket。在 WebTransport 的构造函数中,你需要指定一个 URL。但是和 WebSocket 不同的是,WebTransport 支持可靠传输的流传输,也可以支持不可靠的数据报。

WebScoket 只是客户端发起的,不能由服务器发起;而 WebTransport 可以由服务器发起。另外WebTransport over QUIC 时连接是非 Pooled,而 WebTransport over HTTP/3 是 Pooled,这创造了一些新的应用场景,有些在 IETF BoFs 中由提到过。这意味着,在同一个 QUIC 连接中,你可以传输很多内容,比如 HTTP/3 请求和响应、WebTransport、Streams 和 Datagrams。Justin Uberti 提出过一个标准 IETF RIPT BOF,就是将这些不同的东西放在了一起。在这个场景下,有来回的 RPC 请求,也包括服务器主动发起的请求。比如一个客户端,发出请求说要播放一个电影,或者进入一个游戏,或者加入视频会议,然后服务器就开始主动发起多路不同的视频流的传输了。我认为 WebTransport 有可能会给 Web 带来革命性的变化,HTTP/3 本身就是对 Web 的一种革命。而这些关键变化,是 HTTP/3 Pooled Transport;相比之下,QUIC 就更简单了,它只是给了一个 Socket 一样的能力,可以发送和接收数据。


项目主页:https://sites.google.com/site/webrtc/

参考来源:http://zh.wikipedia.org/wiki/WebRTC