WebRTC 概论
Abstract |
WebRTC 概论 |
Authors |
Walter Fan |
Status |
WIP as draft |
Updated |
2024-08-21 |
WebRTC 简介
一句话,WebRTC 用浏览器来进行实时通信的一套基于 Web 进行实时通信的标准和参考实现, 它也是一个开源项目,最初由 google 发起并交由开源社区,各大浏览器厂商在其各自的产品中亦有部分的采用。
借助WebRTC,你可以在基于开放标准的应用程序中添加实时通信功能。 它支持在节点之间发送视频,语音和通用数据,从而使开发人员能够构建功能强大的语音和视频通信解决方案。 该技术可在所有现代浏览器以及所有主要平台的本机客户端上使用。
WebRTC背后的技术被实现为一个开放的Web标准,并在所有主要浏览器中均以常规JavaScript API的形式提供。 对于本机客户端(例如Android和iOS应用程序),可以使用提供相同功能的库。
什么是 WebRTC?
WebRTC 意味着两个东西:
它是一套浏览器的实时通信规范,包括:
网络实时通讯标准
W3C 和 IETF 正在标准化的规范
通过简单的 JavaScript API 启用Web 浏览器中的音频、视频和屏幕共享功能
无需安装
可以做点对点通讯,也可以用于音视频会议
具有与现有语音和视频系统的互操作性
这也是一个开源项目,包括:
最初由 Google 贡献
由 C++ 实现,可跨平台
代码很多来自于 Google 对 Global IP Solutions 的收购
大多数新视频公司都是基于这个项目
WebRTC 是一个开放的网络框架,可在浏览器中启用实时通信,包括如下功能
媒体设备的访问 MediaDevices
媒体流的捕获 Media Stream Capture
对等连接 Peer connection
本地和远程媒体流 Local and Remote Stream
数据通道 Data Channel
中转服务器 Turn Server
多媒体通信相关的技术
音频: 回声消除 Echo Cancellation, 静音检测 Silence Detection, 噪声消除 Noise Removal, G.711 及 Opus 等编码,防抖动缓冲等
视频: H264, VP8 等视频编码的支持, 防抖动缓冲
传输: 基于 RTP, RTCP, SRTP 和 DTLS 的实时传输和多路利用
信令: 基于 SDP 和 SIP, Jingle, ROAP, RESTful 等协议的多媒体媒体通信参数协商
网络 - 通过 ICE, TURN, STUN 的 NAT 穿透与连接
三大任务
获取音视频流 audio and video
音视频媒体流的通信
任意数据的通信
三个主要的 JS APIs
媒体流 MediaStream
对等连接 RTCPeerConnection
数据通道 RTCDataChannel
WebRTC 应用模型
Browser Model 浏览器模型
+------------------------+ On-the-wire
| | Protocols
| Servers |--------->
| |
| |
+------------------------+
^
|
|
| HTTPS/
| WebSockets
|
|
+----------------------------+
| JavaScript/HTML/CSS |
+----------------------------+
Other ^ ^ RTC
APIs | | APIs
+---|-----------------|------+
| | | |
| +---------+|
| | Browser || On-the-wire
| Browser | RTC || Protocols
| | Function|----------->
| | ||
| | ||
| +---------+|
+---------------------|------+
|
V
Native OS Services
Browser RTC Trapezoid 浏览器实时通信三角
+-----------+ +-----------+
| Web | | Web |
| | | |
| |------------------| |
| Server | Signaling Path | Server |
| | | |
+-----------+ +-----------+
/ \
/ \ Application-defined
/ \ over
/ \ HTTPS/WebSockets
/ Application-defined over \
/ HTTPS/WebSockets \
/ \
+-----------+ +-----------+
|JS/HTML/CSS| |JS/HTML/CSS|
+-----------+ +-----------+
+-----------+ +-----------+
| | | |
| | | |
| Browser |--------------------------------| Browser |
| | Media Path | |
| | | |
+-----------+ +-----------+
WebRTC 应用的核心功能
用户管理 User management
会话管理 Session management
信令管理 Signal management
连接管理 Connection management
设备管理 Device management
媒体流管理 Media Stream/Track management
媒体统计和度量 Media statistics and metrics
Data transport
例如,TCP 和 UDP,以及在实体之间安全地建立连接的手段,以及决定何时发送数据的功能:拥塞管理、带宽估计等。
相关协议:
RFC8835: Transports for WebRTC
Data framing
RTP、流控制传输协议 (SCTP)、DTLS 和其他用作容器的数据格式,以及它们用于数据机密性和完整性的功能。
Data formats
系统之间传递的数据的编解码器规范、格式规范和功能规范。 音频和视频编解码器以及用于数据和文档共享的格式都属于这一类。 为了使用数据格式,需要一种描述它们的方法(例如,会话描述 SDP )。
Connection management
例如,建立连接、就数据格式达成一致、在通话期间更改数据格式。 SDP、SIP 和Jingle/XMPP 属于这一类。
Presentation and control
为了确保交互以一种意料之中的方式进行,所需要的功能包括 floor control, screen layout, voice-activated image switching 和其他此类功能,其中部分系统需要各方之间的合作。 集中式会议 Centralized Conferencing (XCON) [RFC6501] 和 Cisco/Tandberg 的 Telepresence Interoperability Protocol (TIP) 是规范此类功能的一些尝试。
许多应用程序是在没有针对这些功能的标准化接口的情况下构建的。
Local system support functions
一些不需要统一指定的功能,因为每个参与者都可以根据自己的选择实现这些功能,而不会以其他人必须认识到的方式影响线上传输的数据。 例如回声消除(以它的某些形式)、本地身份验证和授权机制、操作系统访问控制以及对对话进行本地记录的能力。
参考资料
RFC8825: Overview: Real-Time Protocols for Browser-Based Applications
https://www.html5rocks.com/en/tutorials/webrtc/infrastructure/