WebRTC API
WebRTC (Web 实时通信) 是一种技术,它使 Web 应用程序和网站能够捕获并可选地流式传输音频和/或视频媒体,以及在浏览器之间交换任意数据,而无需中介。构成 WebRTC 的一组标准使得可以共享数据并执行点对点电话会议,而无需用户安装插件或任何其他第三方软件。
WebRTC 包含几个相互关联的 API 和协议,它们协同工作以实现这一点。您将在本文档中找到的文档将帮助您了解 WebRTC 的基础知识、如何设置和使用数据和媒体连接以及更多内容。
WebRTC 概念和用法
WebRTC 服务于多种目的;它们与媒体捕获和流 API一起,为 Web 提供强大的多媒体功能,包括对音频和视频会议、文件交换、屏幕共享、身份管理以及与传统电话系统的接口支持,包括支持发送DTMF(按键拨号)信号。对等方之间的连接可以建立,而无需任何特殊的驱动程序或插件,并且通常可以在没有任何中介服务器的情况下建立。
两个对等方之间的连接由RTCPeerConnection
接口表示。一旦使用RTCPeerConnection
建立并打开连接,就可以将媒体流(MediaStream
s)和/或数据通道(RTCDataChannel
s)添加到连接中。
媒体流可以包含任意数量的媒体信息轨道;轨道由基于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
-
管理
RTCPeerConnection
上MediaStreamTrack
的数据编码和传输。 RTCRtpReceiver
-
管理
RTCPeerConnection
上MediaStreamTrack
的数据接收和解码。 RTCTrackEvent
-
用于表示
track
事件的接口,该事件指示将RTCRtpReceiver
对象添加到RTCPeerConnection
对象,表示创建并添加了一个新的传入MediaStreamTrack
到RTCPeerConnection
。 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-failure
或fingerprint-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
发送类型为RTCTrackevent
的track
事件。 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 音调,或者
RTCDTMFSender
的toneBuffer
中的最后一个音调已发送,缓冲区现在为空。该事件的类型为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 元素捕获媒体 |