WebRTC API

WebRTC (Web 实时通信) 是一种技术,它使 Web 应用程序和网站能够捕获并可选地流式传输音频和/或视频媒体,以及在浏览器之间交换任意数据,而无需中介。构成 WebRTC 的一组标准使得可以共享数据并执行点对点电话会议,而无需用户安装插件或任何其他第三方软件。

WebRTC 包含几个相互关联的 API 和协议,它们协同工作以实现这一点。您将在本文档中找到的文档将帮助您了解 WebRTC 的基础知识、如何设置和使用数据和媒体连接以及更多内容。

WebRTC 概念和用法

WebRTC 服务于多种目的;它们与媒体捕获和流 API一起,为 Web 提供强大的多媒体功能,包括对音频和视频会议、文件交换、屏幕共享、身份管理以及与传统电话系统的接口支持,包括支持发送DTMF(按键拨号)信号。对等方之间的连接可以建立,而无需任何特殊的驱动程序或插件,并且通常可以在没有任何中介服务器的情况下建立。

两个对等方之间的连接由RTCPeerConnection接口表示。一旦使用RTCPeerConnection建立并打开连接,就可以将媒体流(MediaStreams)和/或数据通道(RTCDataChannels)添加到连接中。

媒体流可以包含任意数量的媒体信息轨道;轨道由基于MediaStreamTrack接口的对象表示,可以包含多种类型的媒体数据,包括音频、视频和文本(例如字幕,甚至章节名称)。大多数流至少包含一个音频轨道,并且可能还包含一个视频轨道,可用于发送和接收实时媒体或存储的媒体信息(例如流式电影)。

您还可以使用两个对等方之间的连接来使用RTCDataChannel接口交换任意二进制数据。这可用于后端信息、元数据交换、游戏状态包、文件传输,甚至作为数据传输的主要通道。

互操作性

WebRTC 通常在现代浏览器中得到良好支持,但仍存在一些不兼容性。 adapter.js库是一个垫片,用于隔离应用程序不受这些不兼容性的影响。

WebRTC 参考

由于 WebRTC 提供了协同工作以完成各种任务的接口,因此我们已按类别划分参考。请参阅侧边栏以获取字母顺序列表。

连接设置和管理

这些接口、字典和类型用于设置、打开和管理 WebRTC 连接。其中包括表示对等方媒体连接、数据通道以及在交换有关每个对等方功能的信息以选择用于双向媒体连接的最佳配置时使用的接口。

接口

RTCPeerConnection

表示本地计算机和远程对等方之间的 WebRTC 连接。它用于处理两个对等方之间数据的有效流式传输。

RTCDataChannel

表示连接的两个对等方之间的双向数据通道。

RTCDataChannelEvent

表示将RTCDataChannel附加到RTCPeerConnection期间发生的事件。此接口发送的唯一事件是datachannel

RTCSessionDescription

表示会话的参数。每个RTCSessionDescription都包含一个描述type,指示它描述了哪个部分的 offer/answer 协商过程,以及会话的SDP 描述符。

RTCStatsReport

提供有关连接或连接上的单个轨道的统计信息的详细信息;可以通过调用RTCPeerConnection.getStats()获取报告。

RTCIceCandidate

表示用于建立RTCPeerConnection的候选交互式连接建立(ICE)服务器。

RTCIceTransport

表示有关ICE传输的信息。

RTCPeerConnectionIceEvent

表示与目标的 ICE 候选人相关的事件,通常是RTCPeerConnection。只有以下一种类型的事件:icecandidate

RTCRtpSender

管理RTCPeerConnectionMediaStreamTrack的数据编码和传输。

RTCRtpReceiver

管理RTCPeerConnectionMediaStreamTrack的数据接收和解码。

RTCTrackEvent

用于表示track事件的接口,该事件指示将RTCRtpReceiver对象添加到RTCPeerConnection对象,表示创建并添加了一个新的传入MediaStreamTrackRTCPeerConnection

RTCSctpTransport

提供描述流控制传输协议 (SCTP) 传输的信息,还提供了一种访问所有RTCPeerConnection的数据通道的 SCTP 数据包发送和接收的底层数据报传输层安全 (DTLS) 传输的方法。

事件

bufferedamountlow

数据通道当前缓冲的数据量(由其bufferedAmount属性指示)已减少至低于或等于通道的最小缓冲数据大小,如bufferedAmountLowThreshold所指定。

close

数据通道已完成关闭过程,现在处于closed状态。此时,其底层数据传输已完全关闭。您可以通过观察closing事件来在关闭完成之前收到通知。

closing

RTCDataChannel已转换为closing状态,表示它将很快关闭。您可以通过观察close事件来检测关闭过程的完成。

connectionstatechange

连接的状态(可以在connectionState中访问)已更改。

datachannel

在远程对等方打开新数据通道后,一个新的RTCDataChannel可用。此事件的类型是RTCDataChannelEvent

error

一个RTCErrorEvent,表示数据通道上发生错误。

error

一个RTCErrorEvent,表示RTCDtlsTransport上发生错误。此错误将是dtls-failurefingerprint-failure

gatheringstatechange

RTCIceTransport的收集状态已更改。

icecandidate

一个RTCPeerConnectionIceEvent,它在本地设备识别到需要通过调用setLocalDescription()添加到本地对等方的新的 ICE 候选人时发送。

icecandidateerror

当收集 ICE 候选者时发生错误,会触发一个 RTCPeerConnectionIceErrorEvent 事件。

iceconnectionstatechange

RTCPeerConnection 的 ICE 连接状态(在 iceconnectionstate 属性中)发生变化时,会发送到该连接。

icegatheringstatechange

RTCPeerConnection 的 ICE 收集状态(在 icegatheringstate 属性中)发生变化时,会发送到该连接。

message

在数据通道上接收到消息时,会触发一个类型为 MessageEvent 的事件。

negotiationneeded

通知 RTCPeerConnection 需要通过调用 createOffer() 然后调用 setLocalDescription() 来执行会话协商。

open

RTCDataChannel 的底层数据传输已成功打开或重新打开。

selectedcandidatepairchange

触发该事件的 RTCIceTransport 上当前选定的 ICE 候选者对发生了变化。

track

当在成功协商媒体流后,将新的轨道添加到连接时,会向 RTCPeerConnection 发送类型为 RTCTrackeventtrack 事件。

signalingstatechange

当对等连接的 signalingstate 发生变化时,会发送到该连接。这通常是调用 setLocalDescription()setRemoteDescription() 的结果。

statechange

RTCDtlsTransport 的状态发生了变化。

statechange

RTCIceTransport 的状态发生了变化。

statechange

RTCSctpTransport 的状态发生了变化。

rtctransform

已准备好使用工作线程中的转换流处理编码的视频或音频帧。

类型

RTCSctpTransport.state

指示 RTCSctpTransport 实例的状态。

身份和安全

这些 API 用于管理用户身份和安全,以便为连接对用户进行身份验证。

RTCIdentityProvider

使用户代理能够请求生成或验证身份断言。

RTCIdentityAssertion

表示当前连接的远程对等方的身份。如果尚未设置和验证对等方,则此接口将返回 null。一旦设置,就不能再更改。

RTCIdentityProviderRegistrar

注册身份提供者 (idP)。

RTCCertificate

表示 RTCPeerConnection 用于身份验证的证书。

电话

这些接口和事件与与公共交换电话网 (PSTN) 的交互有关。它们主要用于通过网络向远程对等方发送拨号音 - 或表示这些音调的数据包。

接口

RTCDTMFSender

管理 RTCPeerConnection 的双音多频 (DTMF) 信号的编码和传输。

RTCDTMFToneChangeEvent

tonechange 事件使用,指示 DTMF 音调已开始或结束。此事件不会冒泡(除非另有说明),并且不可取消(除非另有说明)。

事件

tonechange

连接上开始播放新的 DTMF 音调,或者 RTCDTMFSendertoneBuffer 中的最后一个音调已发送,缓冲区现在为空。该事件的类型为 RTCDTMFToneChangeEvent

编码转换

这些接口和事件用于使用工作线程中运行的转换流处理传入和传出的编码视频和音频帧。

接口

RTCRtpScriptTransform

用于将工作线程中运行的转换流插入 RTC 管道中的接口。

RTCRtpScriptTransformer

RTCRtpScriptTransform 的工作线程端对应物,它从主线程传递选项,以及可用于通过 TransformStream 管道传输编码帧的可读流和可写流。

RTCEncodedVideoFrame

表示要通过 RTC 管道转换的编码视频帧。

RTCEncodedAudioFrame

表示要通过 RTC 管道转换的编码音频帧。

属性

RTCRtpReceiver.transform

用于将转换流插入接收管道以处理传入的编码视频和音频帧的属性。

RTCRtpSender.transform

用于将转换流插入发送管道以处理传出的编码视频和音频帧的属性。

事件

rtctransform

RTC 转换已准备好运行在工作线程中,或者已准备好处理编码的视频或音频帧。

指南

WebRTC 协议简介

本文介绍了 WebRTC API 所基于的协议。

WebRTC 连接

有关 WebRTC 连接工作方式以及如何将各种协议和接口结合起来构建强大的通信应用程序的指南。

WebRTC 会话的生命周期

WebRTC 允许您将任意数据、音频或视频 - 或它们的任意组合 - 的对等通信构建到浏览器应用程序中。在本文中,我们将研究 WebRTC 会话的生命周期,从建立连接一直到当不再需要时关闭连接。

建立连接:完美的协商模式

完美协商是一种设计模式,建议您的信令过程遵循该模式,该模式在协商中提供透明度,同时允许双方成为提供者或应答者,而无需进行大量的编码来区分两者。

信令和双向视频通话

一个教程和示例,它将为先前示例创建的基于 WebSockets 的聊天系统转变为支持在参与者之间打开视频通话。聊天服务器的 WebSocket 连接用于 WebRTC 信令。

WebRTC 使用的编解码器

有关 WebRTC 要求浏览器支持的编解码器以及各种流行浏览器支持的可选编解码器的指南。其中包括一个指南,帮助您选择最适合您需求的编解码器。

使用 WebRTC 数据通道

本指南介绍了如何使用对等连接和相关联的 RTCDataChannel 在两个对等方之间交换任意数据。

使用 DTMF 与 WebRTC

WebRTC 支持与连接到传统电话系统的网关交互,包括使用 RTCDTMFSender 接口发送 DTMF 音调。本指南介绍了如何做到这一点。

使用 WebRTC 编码转换

本指南介绍了 Web 应用程序如何使用 TransformStream 运行到工作线程中来修改传入和传出的 WebRTC 编码视频和音频帧。

教程

使用 WebRTC adapter.js 提高兼容性

WebRTC 组织 在 GitHub 上提供 WebRTC 适配器 以解决不同浏览器 WebRTC 实现中的兼容性问题。该适配器是一个 JavaScript shim,它允许您的代码按照规范编写,以便它在所有支持 WebRTC 的浏览器中“正常工作”。

一个简单的 RTCDataChannel 示例

RTCDataChannel 接口是一项功能,允许您在两个对等方之间打开一个通道,通过该通道您可以发送和接收任意数据。该 API 的设计有意类似于 WebSocket API,因此可以使用相同的编程模型。

使用 Peer.js 构建一个互联网连接的电话

本教程是有关如何使用 Peer.js 构建电话的分步指南。

规范

规范
WebRTC:浏览器中的实时通信
媒体捕获和流
从 DOM 元素捕获媒体

WebRTC 本身协议

另请参阅