Skip to content

🤖 Assistant

好的,没问题!将我们学习到的 WebRTC 知识整理成一个 Markdown 结构的脑图,这样可以让你更直观地看到知识点之间的联系。

markdown
- WebRTC (Web Real-Time Communication)
    - 核心目标:在浏览器中实现点对点 (P2P) 实时通信 (音视频、数据)
    - 第一性原理:如何让浏览器像打电话一样实时交流?
        - 找到对方 & 协商内容
        - 建立直接通道
        - 数据实时传输
        - 克服网络障碍 (NAT 穿透)
        - 安全

    - **1. 信令 (Signaling)**
        - 作用:建立、维护、终止通信会话
        - 职责:交换通信所需的元数据(非媒体数据本身)
        - 关键元数据:SDP (会话描述协议)
        - **非 WebRTC 标准的一部分**:开发者自行选择信令方式(如 WebSocket, HTTP)
        - **安全:建议使用加密通道 (WSS, HTTPS)**

    - **2. SDP (Session Description Protocol)**
        - 作用:描述通信会话的属性(像通信的“菜单”)
        - 内容:
            - 媒体类型 (音视频, 数据流)
            - 编码格式 (Opus, VP8, H.264)
            - 传输协议 (RTP/RTCP)
            - 本地网络信息(供 ICE 使用)
        - 协商流程:
            - Offer (提议): 一方发起,描述自己期望的会话参数
            - Answer (应答): 另一方响应,根据自身能力和 Offer 创建

    - **3. NAT 穿透 (Network Address Translation Traversal)**
        - 问题根源:设备常位于 NAT 后,外部网络无法直接连接
        - 解决方案框架:ICE (Interactive Connectivity Establishment)
            - **STUN (Session Traversal Utilities for NAT)**
                - 作用:发现公共 IP 地址和端口
                - 局限性:无法穿透所有 NAT 类型 (如 Symmetric NAT)
            - **TURN (Traversal Using Relays around NAT)**
                - 作用:充当中继服务器,转发媒体数据(当 P2P 失败时)
                - 优点:几乎适用于所有网络环境
                - 缺点:增加服务器成本、延迟和带宽消耗
            - **ICE 的工作方式:**
                - 收集所有可能的连接地址 (候选地址)
                - 通过信令交换候选地址
                - 尝试最优路径(P2P -> STUN -> TURN)
                - 建立连接

    - **4. 核心 API**
        - **`navigator.mediaDevices.getUserMedia()`**
            - 作用:访问本地媒体设备(麦克风、摄像头)
            - 返回:一个 `MediaStream` 对象(包含媒体轨道 Track)
            - 安全:强制用户授权(安全上下文要求)
        - **`RTCPeerConnection`**
            - 作用:建立和管理 P2P 连接,传输媒体和数据
            - 核心功能:
                - 管理媒体流 (`addTrack`)
                - 实现 ICE 流程
                - 使用 RTP/RTCP 进行媒体传输
                - 使用 DTLS-SRTP 进行加密
                - 支持 DataChannel (传输任意数据)
            - 事件监听:`onicecandidate`, `ontrack`, `oniceconnectionstatechange`, `onconnectionstatechange`

    - **5. WebRTC 架构模式 (多方通信)**
        - **Mesh (网状网络)**
            - 特点:所有人直接与所有人 P2P 连接
            - 优点:纯 P2P,低延迟,无需媒体服务器
            - 缺点:客户端负担大 (O(N^2) 连接和带宽),扩展性差
            - 适用:小型群组 (3-4 人)
        - **SFU (Selective Forwarding Unit)**
            - 特点:客户端连接到 SFU 服务器,SFU 选择性转发媒体流
            - 优点:客户端负担轻,扩展性比 Mesh 好
            - 缺点:需要媒体服务器,延迟稍高,非纯 P2P
            - 适用:大多数多人会议场景 (推荐模式)
        - **MCU (Multipoint Control Unit)**
            - 特点:SFU 的加强版,服务器混合并重新编码所有媒体流
            - 优点:客户端负担最小,适合低性能设备
            - 缺点:服务器成本极高 (CPU),灵活性差,可能质量损失,延迟高

    - **6. 安全机制**
        - **`getUserMedia` 隐私保护:** 强制用户授权,仅限安全上下文 (HTTPS)
        - **传输安全:**
            - **DTLS (Datagram TLS):** 在 UDP 上提供加密、密钥协商、身份验证
            - **SRTP (Secure RTP):** 对媒体数据本身进行加密、完整性校验和防重放保护
            - 关系:DTLS 建立安全隧道并协商密钥,SRTP 使用密钥加密媒体数据
        - **信令安全:** 推荐使用 WSS (Secure WebSocket) 或 HTTPS
        - **混合内容阻止:** 阻止不安全的 HTTP 页面使用 WebRTC 功能

    - **7. 端到端工作流程与实践**
        - **流程总结:** 获取媒体 -> 创建 PeerConnection -> 添加轨道 -> 协商 SDP (Offer/Answer) -> 交换 ICE 候选地址 -> 建立连接 -> 传输媒体/数据
        - **常见挑战与解决方案:**
            - **NAT 穿透失败:** 检查 TURN 服务器、网络环境,使用可靠的 ICE 实现
            - **低媒体质量:** 带宽不足、网络抖动、CPU 过载;检查 RTCP 反馈,自适应编码,选择合适的编解码器,使用 SFU/MCU
            - **信令服务器问题:** 部署高可用信令服务器,使用心跳和重试机制

    - **构建基础应用要素:**
        - **前端:** HTML (`<video>`), CSS, JavaScript (WebRTC API)
        - **信令服务器:** WebSocket (最常用)
        - **部署:** 安全上下文 (HTTPS 或 localhost)
本站总访问量 次 本站访客数 人次

1111111111111111111