基础概念
简介
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候选信息,用于协商连接。
点对点连接的建立流程
- 获取媒体流
- 创建RTCPeerConnection对象
- 交换SDP(通过信令服务器传递offer/answer)
- 交换ICE Candidate
- 建立连接并开始传输媒体流
结束语
WebRTC的基本概念就介绍到这,接下来我将对上述的各个知识点进行详细的记录。