WebRTC 入门:是什么、能做什么、核心模块

WebRTC 入门:是什么、能做什么、核心模块

WebRTC 让浏览器和 App 不用装插件就能实现实时音视频通话。这篇从零讲起:WebRTC 是什么、能做什么、整体架构、核心模块,以及一个最简单的例子跑起来。

大家好,我是黒漂技术佬。

做音视频的,WebRTC 绕不开。以前要做网页视频通话,得装 Flash 插件,或者用专门的客户端。现在有了 WebRTC,浏览器原生支持,几行 JS 就能开摄像头、做视频通话。

不仅是浏览器,移动端、PC 端都有 WebRTC 的实现,跨平台的实时通信基本都用它。

这篇是 WebRTC 系列的第一篇,讲基础概念、能做什么、核心模块有哪些。


一、WebRTC 是什么?

全称

Web R eal-T ime Communication,网页实时通信。

是什么

一套开放的标准和技术,让浏览器和移动应用之间可以直接进行实时音视频和数据通信,不需要中间插件或第三方软件。

谁搞的

  • 最早是 Google 收购 GIPS 公司后开源的
  • 现在由 W3C 和 IETF 标准化
  • Chrome、Firefox、Safari、Edge 全部支持

特点

  1. 免费开源:免费使用,代码开源
  2. 浏览器原生支持:不用装插件,JS API 直接用
  3. 点对点(P2P):数据直接在两端传输,不经过服务器(打洞成功的话)
  4. 低延迟:实时通信,延迟一般几百毫秒
  5. 跨平台:Web、Android、iOS、Windows、Mac 都支持

二、WebRTC 能做什么?

1. 视频通话 / 语音通话

最常见的场景:一对一视频聊天、多人视频会议。

2. 屏幕共享

远程协作、在线教育、技术支持,共享屏幕给对方看。

3. 实时数据传输

DataChannel 可以传任意数据:

  • 文件传输
  • 游戏同步
  • 白板协作
  • 实时消息

4. 直播

低延迟直播场景,比 RTMP/HLS 延迟低很多。

5. 物联网

设备之间实时传输音视频和数据。

典型应用

  • 视频会议:Zoom、腾讯会议、飞书会议(底层很多用了 WebRTC 技术)
  • 在线教育:一对一辅导、小班课
  • 社交应用:视频聊天
  • 远程医疗:远程问诊
  • 云游戏:低延迟传输游戏画面

三、WebRTC 整体架构

三大核心模块

复制代码
┌─────────────────────────────────────────┐
│           WebRTC 整体架构               │
│                                         │
│  ┌─────────────┐  ┌─────────────────┐  │
│  │ getUserMedia│  │   RTCPeerConn   │  │
│  │  音视频采集  │  │  连接与传输     │  │
│  └──────┬──────┘  └───────┬─────────┘  │
│         │                 │            │
│         └────────┬────────┘            │
│                  │                     │
│         ┌────────┴────────┐            │
│         │  RTCDataChannel │            │
│         │   数据通道       │            │
│         └─────────────────┘            │
│                                         │
│  底层:音视频编解码、网络传输、NAT穿透   │
└─────────────────────────────────────────┘

1. MediaStream(媒体流)

  • 音视频数据的抽象
  • 包含多个轨道(Track):视频轨、音频轨
  • 来源:摄像头、麦克风、屏幕共享、本地文件

2. RTCPeerConnection(点对点连接)

  • WebRTC 的核心,负责建立和管理两端的连接
  • 处理 NAT 穿透(STUN/TURN)
  • 处理音视频编解码
  • 处理网络传输(SRTP)
  • 处理带宽估计、丢包重传等

3. RTCDataChannel(数据通道)

  • 在点对点连接上传输任意数据
  • 支持可靠和不可靠两种模式
  • 低延迟,适合实时数据传输

四、关键技术点

1. 音视频编解码

视频
  • VP8 / VP9:Google 推的,免版税,WebRTC 默认
  • H.264:硬件支持好,兼容性好
  • AV1:新一代,压缩率高,正在普及
音频
  • Opus:WebRTC 默认,音质好,码率范围大
  • G.711 / G.722:传统电话用的,兼容性好

WebRTC 会自动协商两端都支持的编解码器。

2. NAT 穿透(STUN / TURN / ICE)

大部分设备在 NAT 后面(路由器、防火墙),不能直接连接。

  • STUN:帮你发现自己的公网 IP 和端口
  • TURN:打洞失败时的中继服务器,数据转一下
  • ICE:整合 STUN 和 TURN,自动选最好的连通路径

后面专门一篇讲这个。

3. 信令(Signaling)

WebRTC 不管怎么交换联系方式,这部分要自己实现:

  • 交换 SDP(媒体协商信息)
  • 交换 ICE Candidate(网络候选地址)
  • 控制通话的开始、结束

信令服务器可以用 WebSocket、HTTP 随便实现,WebRTC 标准不管这个。

4. 安全

  • 媒体流用 SRTP 加密传输
  • 数据通道用 DTLS 加密
  • 必须 HTTPS 才能用(localhost 除外)

五、最简单的例子:打开摄像头

不用建立连接,先看看怎么获取本地摄像头:

html 复制代码
<!DOCTYPE html>
<html>
<body>
  <video id="localVideo" autoplay playsinline></video>

  <script>
    // 获取摄像头和麦克风
    async function startCamera() {
      try {
        const stream = await navigator.mediaDevices.getUserMedia({
          video: true,
          audio: true
        });
        
        // 显示到 video 标签
        const video = document.getElementById('localVideo');
        video.srcObject = stream;
        
        console.log('摄像头已打开');
      } catch (err) {
        console.error('打开摄像头失败:', err);
      }
    }
    
    startCamera();
  </script>
</body>
</html>

就这么几行,浏览器就能打开摄像头显示画面。这就是 WebRTC 的 MediaStream API。


六、一次完整的通话流程

两个浏览器建立视频通话,大致分几步:

第一步:信令服务器连通

两边都连上信令服务器,能互相发消息。

第二步:发起方创建 Offer

复制代码
A 创建 RTCPeerConnection
A 调用 createOffer() 生成 SDP
A 设置本地描述 setLocalDescription
A 通过信令把 Offer SDP 发给 B

第三步:接收方回复 Answer

复制代码
B 收到 Offer,设置远端描述 setRemoteDescription
B 创建 Answer SDP
B 设置本地描述
B 通过信令把 Answer SDP 发给 A

第四步:交换 ICE 候选

复制代码
两边各自收集 ICE Candidate(自己的网络地址)
通过信令服务器互相转发
两边尝试连接(STUN打洞、TURN中继)
找到可用的连接路径

第五步:媒体流传输

复制代码
连接建立成功
两边把音视频流通过 PeerConnection 发送
对方收到流,显示出来

简化流程图

复制代码
  A                    信令服务器                    B
  │                       │                        │
  │─── 加入房间 ──────────▶│                        │
  │                       │──── 有人加入 ──────────▶│
  │                       │                        │
  │─── Offer SDP ────────▶│                        │
  │                       │──── Offer SDP ────────▶│
  │                       │                        │── 创建Answer
  │                       │◀─── Answer SDP ────────│
  │◀── Answer SDP ────────│                        │
  │                       │                        │
  │─── ICE Candidate ────▶│                        │
  │                       │── ICE Candidate ──────▶│
  │                       │◀── ICE Candidate ──────│
  │◀── ICE Candidate ─────│                        │
  │                       │                        │
  │◀════════════ P2P 音视频数据 ═══════════════════▶│

看起来复杂,其实核心就是:交换 SDP 协商媒体、交换 ICE 建立连接、然后传数据。


七、WebRTC 的难点在哪?

1. NAT 穿透复杂

网络环境千差万别:不同路由器、不同运营商、防火墙、对称 NAT......

有些环境 STUN 打洞打不通,必须用 TURN 中继。

2. 多人通话架构复杂

一对一简单,多人就麻烦了:

  • Mesh:每个人连每个人,人多了上行带宽扛不住
  • SFU:转发服务器,每个人发一路,服务器转发给其他人
  • MCU:混流服务器,把多路合成一路

后面专门一篇讲多人架构。

3. 网络波动处理

实时网络不稳定,丢包、抖动、带宽变化。WebRTC 有很多机制处理:

  • 拥塞控制(GCC、BBR)
  • 丢包重传(NACK)
  • 前向纠错(FEC)
  • 自适应码率

4. 设备兼容性

不同浏览器、不同版本,API 有差异。一般用 adapter.js 抹平差异。

5. 移动端适配

Android/iOS 上的 WebRTC,后台、锁屏、权限处理都有坑。


八、本系列内容安排

这个系列 10 篇,从基础到实战:

  1. WebRTC 入门:是什么、核心模块
  2. 音视频采集:getUserMedia 与设备管理
  3. 媒体流与轨道:MediaStream / MediaTrack
  4. RTCPeerConnection 连接建立:SDP 与 ICE
  5. NAT 穿透详解:STUN / TURN / ICE
  6. 音视频编解码:VP8 / VP9 / H.264 / Opus
  7. 数据通道:DataChannel 可靠与不可靠传输
  8. 信令服务器设计与实现
  9. 多人会议架构:Mesh / SFU / MCU 对比
  10. 实战:一对一视频通话完整实现

九、本篇小结

  • WebRTC = 网页实时通信,浏览器原生支持,开源免费
  • 三大核心:MediaStream(采集)、RTCPeerConnection(连接传输)、DataChannel(数据)
  • 关键技术:音视频编解码、NAT 穿透(STUN/TURN/ICE)、信令、加密
  • 通话流程:信令交换 SDP → 交换 ICE → 建立连接 → 传输媒体
  • 难点:NAT 穿透、多人架构、网络波动、兼容性
  • 最简单的应用:getUserMedia 几行代码打开摄像头

下一篇讲音视频采集:getUserMedia 详细用法、设备管理、参数控制、屏幕共享。

我是黒漂技术佬。

相关推荐
qq_291579252 小时前
AI电商主图视频在线生成:技术解析、工具横评与实战指南
人工智能·音视频
中微极客3 小时前
Gemini Omni Flash:对话式AI视频编辑新范式
人工智能·音视频·新人首发
阿拉斯攀登3 小时前
数据通道:RTCDataChannel 可靠与不可靠传输
音视频·webrtc·实时音视频·媒体·视频编解码
EasyDSS5 小时前
视频直播点播/音视频点播/云点播/云直播EasyDSS智慧校园:一屏直播,全场景重构“教、学、练、测、评”
重构·音视频
VidDown5 小时前
在线视频下载器技术解析:原理、工具与合规实践
网络·音视频·实时音视频·视频编解码·视频下载
REDcker6 小时前
腾讯TRRO SDK深度剖析
音视频·webrtc·实时音视频·直播·rtc·腾讯
阿拉斯攀登8 小时前
FFmpeg 入门:命令行的 20 个常用场景
ffmpeg·音视频·webrtc·视频编解码
ai产品老杨19 小时前
H264 H265视频分析常见问题和排查清单
人工智能·算法·音视频
“码”力全开19 小时前
AI视频分析API性能优化指南
人工智能·性能优化·音视频
美狐美颜SDK开放平台21 小时前
Android/iOS直播APP平台开发中的视频美颜SDK优化技巧
android·ios·音视频·美颜sdk·第三方美颜sdk