WebRTC基础

167 阅读3分钟

基础概念

简介

WebRTC(Web Real Time Communication)是一项允许浏览器通过点对点连接直接进行实时音频、视频以及数据传输的技术。

主要功能

  • 音视频通信: 通过点对点连接发送和接收实时音视频流。
  • 数据传输: 通过DataChannel传输任意类型的数据,例如文件或游戏数据。
  • NAT和防火墙穿透: 通过ICE框架和STUN、TURN服务器实现对设备之间网络连接的优化和穿透。

应用场景

  • 视频会议
  • 在线教育
  • 游戏实时通信
  • 实时音视频通信应用(如WhatsApp、Coogle Meet)

WebRTC相关协议和标准

  • ICE(Interactive Connectivity Establishment): 用于在复杂环境网络环境中建立连接(例如NAT或防火墙开启后的设备)。
  • STUN(Session Traversal Utilities for NAT): 帮助客户端找出它们的公有IP地址和端口,用于穿透NAT。
  • TURN(Traversal Using Relays around NAT): 如果直接的P2P连接无法建立,TURN服务器可以作为中继,传递音视频和数据流。
  • SDP(Session Description Protocol): 描述媒体流的协议信息(例如音视频的编解码器信息、连接的元数据等)。
  • SRTP(Secure Real-time Transport Protocol): 用于加密WebRTC中传输的媒体流,保证数据的安全性。

WebRTC的核心组件

RTCPeerConnection

RTCPeerConnection 用于建立、维护和监控与远端对等端之间的点对点连接,负责管理音视频数据流的传输。

主要方法

  • createOffer(): 创建一个用于初始化连接的SDP Offer。
  • createAnswer(): 响应远程的SDP offer。
  • setLocalDescription(): 设置本地SDP信息。
  • setRemoteDescription(): 设置远端SDP信息。
  • addIceCandidate(): 向对等端添加一个ICE候选者。

MediaStream

允许Web应用程序从用户的摄像头、麦克风或其他媒体输入设备中获取实时的媒体流。

主要方法

  • getUserMedia(): 用于获取媒体流(音频或视频)。
  • enumeraDevices(): 返回连接到设备上的媒体输入和输出设备列表,比如:摄像头、麦克风、扬声器等。
  • getDisplayMedia(): 获取显示设备屏幕的媒体流(用于屏幕共享)。
  • ondevicechange: 设备列表发生变化时触发的事件(例如插入或移除媒体设备)。

RTCDataChannel

用于点对点传输任意数据的通道,例如文本、文件等。

主要方法

  • createDataChannel(): 在RTCPeerConnection上创建数据通道。

ICE Candidate

表示可以用于连接的网络路径(例如本地IP、STUN生成的公有IP等)。

WebRTC的工作流程

信令机制

WebRTC自身不规定信令的传输方式。开发者可以使用任何信令协议(如WebSocket、HTTP、SIP)来交换SDP和ICE候选信息,用于协商连接。

点对点连接的建立流程

  1. 获取媒体流
  2. 创建RTCPeerConnection对象
  3. 交换SDP(通过信令服务器传递offer/answer)
  4. 交换ICE Candidate
  5. 建立连接并开始传输媒体流

结束语

WebRTC的基本概念就介绍到这,接下来我将对上述的各个知识点进行详细的记录。

学习资源