Skip to content

WebRTC - 概述

WebRTC(Web Real-Time Communication,Web实时通信)彻底改变了Web上的实时通信方式。自初次发布以来,它已成熟成为一个稳定的W3C和IETF标准,使得现代Web应用程序能够无需插件或外部软件,直接在浏览器和设备之间传输音频、视频和数据。这项技术使开发者能够构建丰富、交互式的体验,如视频会议、直播和点对点文件共享。

WebRTC实现了浏览器之间的点对点(P2P)连接。虽然从头构建此类功能涉及数据同步、丢包处理和NAT/防火墙穿越等复杂挑战,但WebRTC提供了内置的浏览器API来处理这些问题。关键的WebRTC API包括:

  • navigator.mediaDevices.getUserMedia: 用于访问摄像头和麦克风。
  • RTCPeerConnection: 用于建立和管理P2P连接。
  • RTCDataChannel: 用于在对等方之间发送任意数据。

WebRTC是开源的,其参考实现在webrtc.org上提供。需要注意的是,WebRTC应用程序的大部分功能(特别是媒体捕获)通常需要安全上下文(HTTPS)。

WebRTC连接的基本流程涉及几个关键步骤:1. 用户A发起呼叫。2. 用户A的浏览器捕获媒体(音频/视频)并创建一个“offer”(使用SDP - Session Description Protocol,会话描述协议描述其媒体能力)。3. 这个offer通过一个称为“信令”(signaling)的独立通信通道发送给用户B(WebRTC不定义此通道;开发者选择自己的方法,如WebSockets)。4. 用户B接收到offer,创建一个“answer”(自己的SDP描述),并通过信令将其发送回用户A。5. 两个浏览器还交换网络信息(ICE候选者),以找到最佳连接路径。6. 一旦offer/answer交换和ICE协商完成,便建立直接的点对点连接以进行媒体和数据流传输。

许多WebRTC应用程序的第一步是访问用户的摄像头和麦克风。navigator.mediaDevices.getUserMedia() API允许Web应用程序向用户请求访问这些设备的权限。一旦权限被授予,它将提供一个包含音频和/或视频轨道的 MediaStream 对象。

音频和视频的编码和解码(Encoding and Decoding Audio and Video)

Section titled “音频和视频的编码和解码(Encoding and Decoding Audio and Video)”

通过互联网传输原始音频和视频数据效率低下。编解码器(codecs,编码器-解码器)对数据进行压缩以便传输,并进行解压缩以便播放。WebRTC强制要求支持某些编解码器:Opus用于音频,VP8/VP9和H.264用于视频,它们得到广泛支持。现代浏览器也可能支持更新的编解码器,如AV1。当两个浏览器连接时,它们会协商一个共同的编解码器。WebRTC在幕后处理了大部分复杂性。

WebRTC主要通过SRTP(Secure Real-time Transport Protocol)使用UDP(User Datagram Protocol)进行媒体传输,UDP因其低延迟而非常适合实时数据。它集成了ICE(Interactive Connectivity Establishment)、STUN(Session Traversal Utilities for NAT)和TURN(Traversal Using Relays around NAT)等机制,以应对NAT和防火墙等网络复杂性,从而在可能的情况下实现直接的P2P连接,否则实现中继连接。RTCPeerConnection API提供了事件来监控连接状态。

会话管理(信令 - Session Management (Signaling))

Section titled “会话管理(信令 - Session Management (Signaling))”

WebRTC未指定信令协议。信令是协调通信的过程:交换控制消息以打开、管理和关闭连接(例如,会话描述、ICE候选者)。开发者必须使用WebSockets、SIP或XMPP等技术实现自己的信令机制。除了媒体,WebRTC的RTCDataChannel API允许在对等方之间直接发送任意数据,如文本消息或游戏状态。

WebRTC生态系统的繁荣得益于Google、Mozilla、Apple、Microsoft以及更广泛的开源社区的贡献。

浏览器兼容性(Browser Compatibility)

Section titled “浏览器兼容性(Browser Compatibility)”

WebRTC现已广泛支持于现代桌面和移动浏览器,包括Chrome、Firefox、Safari和Edge。但是,实现或对特定功能的支持可能存在细微差异。最好是查阅caniuse.com(搜索’RTCPeerConnection’和’getUserMedia’)等资源,以获取最新的兼容性信息。对于开发,建议使用您偏好浏览器的最新稳定版本。

许多WebRTC演示应用程序在线提供。体验WebRTC的一个简单方法是找到一个基本的视频聊天演示。通常,您需要进行以下步骤:

  1. 在浏览器中打开演示网站。您可能需要输入房间名称或单击“开始”按钮。
  2. 浏览器可能会提示您请求访问摄像头和麦克风的权限。单击“允许”。
  3. 然后,您应该能在页面上看到自己的视频流。
  4. 要连接另一个对等方,在另一个浏览器标签页或另一台设备上打开相同的URL(如果适用,使用相同的房间名称)。
  5. 在第二个浏览器/设备中也允许媒体权限。
  6. 然后,两个实例应该连接,您将看到自己和另一个“对等方”的视频流。

这个简单的测试展示了WebRTC在浏览器之间建立直接媒体通信的能力。

WebRTC支持各种实时应用程序,包括:

  • 视频和音频会议
  • 点对点文件共享
  • 直播和广播
  • 具有实时互动的在线游戏
  • 屏幕共享
  • 远程医疗和远程咨询
  • 协作白板和文档编辑
  • 物联网设备通信

现在您对WebRTC、其核心组件及其功能有了基础的了解。WebRTC是一项强大且多功能的技术,可直接将实时通信功能构建到Web应用程序中。