2026/1/14 23:43:18
网站建设
项目流程
浙江省建设业技术创新协会网站,公司网站建设属于什么职位,wordpress添加子主题,一级消防工程师考试难不难WebRTC 是什么#xff1f;能做什么#xff1f;#xff08;概览篇#xff09; 本文是 WebRTC 系列专栏的第一篇#xff0c;旨在帮助读者建立对 WebRTC 的整体认知#xff0c;了解其发展历程、核心能力、主要组件以及优势与局限。 目录
WebRTC 的发展历史WebRTC 能解决什么…WebRTC 是什么能做什么概览篇本文是 WebRTC 系列专栏的第一篇旨在帮助读者建立对 WebRTC 的整体认知了解其发展历程、核心能力、主要组件以及优势与局限。目录WebRTC 的发展历史WebRTC 能解决什么问题WebRTC 核心组件WebRTC 的优势与局限总结1. WebRTC 的发展历史1.1 起源从 GIPS 到 GoogleWebRTCWeb Real-Time Communication的故事要从一家名为Global IP SolutionsGIPS的瑞典公司说起。GIPS 成立于 1999 年专注于开发高质量的音视频编解码器和实时通信技术。他们的技术被广泛应用于 Skype、Yahoo Messenger、QQ 等知名即时通讯软件中。2010 年 5 月Google 以 6820 万美元收购了 GIPS。这次收购为 WebRTC 的诞生奠定了技术基础。1.2 WebRTC 的诞生与标准化时间里程碑事件2011 年 5 月Google 宣布开源 WebRTC 项目将 GIPS 的核心技术贡献给开源社区2011 年 10 月W3C 发布 WebRTC 1.0 的第一个工作草案2012 年 1 月Chrome 稳定版开始支持 WebRTC2013 年 2 月Firefox 和 Chrome 之间首次实现跨浏览器 WebRTC 通话2017 年 11 月Apple 在 Safari 11 中加入 WebRTC 支持2021 年 1 月W3C 和 IETF 正式将 WebRTC 1.0 定为推荐标准Recommendation1.3 标准化组织WebRTC 的标准化由两个组织共同推进W3CWorld Wide Web Consortium负责定义 JavaScript API 规范IETFInternet Engineering Task Force负责定义底层协议规范如 ICE、DTLS-SRTP 等1.4 版本演进WebRTC 1.02021 年正式成为 W3C 推荐标准定义了核心 APIWebRTC NVNext Version正在开发中包含 Insertable Streams、WebTransport 集成等新特性2. WebRTC 能解决什么问题WebRTC 的核心价值在于让浏览器具备原生的实时音视频通信能力无需安装任何插件。2.1 典型应用场景实时音视频通话这是 WebRTC 最核心的应用场景。用户 A 的浏览器 ----- 用户 B 的浏览器 | | 摄像头/麦克风 摄像头/麦克风典型产品Google MeetDiscordWeb 版Facebook MessengerZoomWeb 版直播互动WebRTC 的低延迟特性通常 500ms使其非常适合需要实时互动的直播场景。应用场景连麦直播在线拍卖体育赛事实时竞猜电商直播带货对比传统直播协议协议典型延迟适用场景HLS10-30 秒点播、大规模直播RTMP3-5 秒推流、传统直播WebRTC 500ms实时互动在线教育WebRTC 在在线教育领域的应用非常广泛1 对 1 辅导师生实时音视频互动小班课多人音视频会议大班课老师端使用 WebRTC学生端可降级为 HLS互动白板通过 DataChannel 实现实时协作典型产品ClassIn、腾讯课堂、VIPKIDP2P 文件传输利用 WebRTC 的 DataChannel可以实现浏览器之间的点对点文件传输// 发送端dataChannel.send(fileData);// 接收端dataChannel.onmessage(event){saveFile(event.data);};典型产品ShareDrop、Snapdrop、PairDrop云游戏与远程桌面WebRTC 的低延迟特性使其成为云游戏和远程桌面的理想选择云游戏Google Stadia已关闭、NVIDIA GeForce NOW远程桌面Parsec、Chrome Remote DesktopIoT 与智能设备智能门铃实时视频无人机实时图传工业设备远程监控2.2 WebRTC 解决的核心痛点在 WebRTC 出现之前浏览器实现实时通信面临诸多挑战痛点传统方案WebRTC 方案需要安装插件Flash、Java Applet原生支持无需插件跨平台兼容性差各平台独立开发统一 API跨浏览器延迟高服务器中转P2P 直连开发成本高需要深厚音视频背景简单 API 封装3. WebRTC 核心组件WebRTC 的核心由三大组件构成┌─────────────────────────────────────────────────────────────┐ │ WebRTC 核心组件 │ ├─────────────────┬─────────────────────┬─────────────────────┤ │ MediaStream │ RTCPeerConnection │ RTCDataChannel │ │ (媒体流) │ (对等连接) │ (数据通道) │ ├─────────────────┼─────────────────────┼─────────────────────┤ │ 获取音视频数据 │ 建立 P2P 连接 │ 传输任意数据 │ │ 处理媒体轨道 │ 处理信令交换 │ 支持可靠/不可靠传输 │ │ 控制设备访问 │ 管理 ICE 候选 │ 类似 WebSocket API │ └─────────────────┴─────────────────────┴─────────────────────┘3.1 MediaStream媒体流MediaStream 负责获取和管理音视频数据。获取媒体流// 获取摄像头和麦克风conststreamawaitnavigator.mediaDevices.getUserMedia({video:true,audio:true});// 获取屏幕共享constscreenStreamawaitnavigator.mediaDevices.getDisplayMedia({video:true});核心概念MediaStream包含一个或多个轨道的媒体流MediaStreamTrack单个音频或视频轨道MediaDevices访问媒体设备的接口轨道操作// 获取所有视频轨道constvideoTracksstream.getVideoTracks();// 获取所有音频轨道constaudioTracksstream.getAudioTracks();// 禁用视频轨道关闭摄像头但保持连接videoTracks[0].enabledfalse;// 停止轨道完全释放设备videoTracks[0].stop();3.2 RTCPeerConnection对等连接RTCPeerConnection 是 WebRTC 的核心负责建立和维护 P2P 连接。核心职责信令交换交换 SDPSession Description ProtocolNAT 穿透通过 ICE 框架建立连接媒体传输使用 SRTP 加密传输音视频连接管理监控连接状态、处理重连基本使用// 创建 PeerConnectionconstpcnewRTCPeerConnection({iceServers:[{urls:stun:stun.l.google.com:19302}]});// 添加本地媒体流stream.getTracks().forEach(track{pc.addTrack(track,stream);});// 创建 Offerconstofferawaitpc.createOffer();awaitpc.setLocalDescription(offer);// 处理远端 Answerawaitpc.setRemoteDescription(remoteAnswer);// 监听远端媒体流pc.ontrack(event){remoteVideo.srcObjectevent.streams[0];};连接建立流程发起方 (Caller) 接收方 (Callee) │ │ │ 1. createOffer() │ │────────────────────────────────── │ │ │ 2. setLocalDescription(offer) │ │ │ │ 3. 通过信令服务器发送 Offer ──────── │ │ │ 4. setRemoteDescription(offer) │ │ │ 5. createAnswer() │ │ │ 6. setLocalDescription(answer) │ │ │ ──────── 7. 通过信令服务器发送 Answer │ │ │ 8. setRemoteDescription(answer) │ │ │ │ ═══════ 9. ICE 候选交换 ═══════ │ │ │ ══════ 10. P2P 连接建立 ══════ │ │3.3 RTCDataChannel数据通道DataChannel 允许在 P2P 连接上传输任意数据。特点基于 SCTPStream Control Transmission Protocol支持可靠传输和不可靠传输支持有序和无序传输API 类似 WebSocket基本使用// 创建数据通道constdataChannelpc.createDataChannel(myChannel,{ordered:true,// 是否保证顺序maxRetransmits:3// 最大重传次数});// 发送数据dataChannel.send(Hello, WebRTC!);dataChannel.send(newArrayBuffer(1024));// 接收数据dataChannel.onmessage(event){console.log(Received:,event.data);};// 监听状态变化dataChannel.onopen()console.log(Channel opened);dataChannel.onclose()console.log(Channel closed);配置选项选项说明默认值ordered是否保证消息顺序truemaxPacketLifeTime消息最大生存时间ms-maxRetransmits最大重传次数-protocol子协议名称negotiated是否手动协商falseid通道 ID自动分配⚠️maxPacketLifeTime和maxRetransmits互斥只能设置其一。4. WebRTC 的优势与局限4.1 优势✅ 原生支持无需插件!-- 传统方案需要 Flash --objecttypeapplication/x-shockwave-flash.../object!-- WebRTC原生支持 --videoidlocalVideoautoplaymuted/videoscriptnavigator.mediaDevices.getUserMedia({video:true}).then(streamlocalVideo.srcObjectstream);/script✅ 超低延迟场景延迟局域网 P2P 50ms公网 P2P100-300msTURN 中转200-500ms✅ 端到端加密WebRTC 强制使用加密DTLSDatagram Transport Layer Security密钥交换SRTPSecure Real-time Transport Protocol媒体加密┌──────────────────────────────────────────────────┐ │ WebRTC 安全架构 │ ├──────────────────────────────────────────────────┤ │ 应用层 │ SDP / ICE │ ├──────────────────────────────────────────────────┤ │ 安全层 │ DTLS (密钥交换) SRTP (媒体加密) │ ├──────────────────────────────────────────────────┤ │ 传输层 │ UDP / TCP │ └──────────────────────────────────────────────────┘✅ P2P 直连节省带宽成本传统方案服务器中转 用户 A ── 服务器 ── 用户 B 带宽成本 ×2 WebRTC P2P 用户 A ──────────── 用户 B 带宽成本 ×0✅ 跨平台支持平台支持情况Chrome✅ 完整支持Firefox✅ 完整支持Safari✅ 支持iOS 11Edge✅ 完整支持Android WebView✅ 支持iOS WKWebView⚠️ 部分支持✅ 开源且免费libwebrtc 完全开源BSD 许可证无需支付专利费用活跃的社区支持4.2 局限❌ 大规模场景的挑战P2P 架构在大规模场景下面临挑战N 个用户全互联 连接数 N × (N-1) / 2 10 人会议 45 条连接 50 人会议 1225 条连接 ← 不可行解决方案SFUSelective Forwarding Unit服务器转发每人只需 1 条上行MCUMultipoint Control Unit服务器混流带宽最优但 CPU 开销大❌ NAT 穿透成功率不同 NAT 类型的穿透成功率NAT 类型穿透难度成功率Full Cone简单~95%Restricted Cone中等~85%Port Restricted Cone较难~70%Symmetric困难~30%当 P2P 穿透失败时需要 TURN 服务器中转这会增加延迟产生服务器带宽成本❌ 移动端的挑战iOS WKWebView不支持getUserMedia后台运行App 切到后台时连接可能中断网络切换WiFi/4G 切换时需要重新建立连接❌ 信令服务器仍然需要WebRTC 本身不包含信令机制开发者需要自行实现// 需要自己实现信令服务器constsignalingServernewWebSocket(wss://your-signaling-server.com);signalingServer.send(JSON.stringify({type:offer,sdp:offer.sdp}));❌ 调试困难网络问题难以定位编解码问题需要专业知识缺乏统一的调试工具推荐调试工具chrome://webrtc-internalsWireshark配合 SSLKEYLOGFILE❌ 编解码器兼容性编解码器ChromeFirefoxSafariVP8✅✅✅VP9✅✅❌H.264✅✅✅AV1✅⚠️❌Opus✅✅✅5. 总结WebRTC 核心要点方面要点定义浏览器原生的实时音视频通信技术标准化W3CAPI IETF协议核心组件MediaStream RTCPeerConnection RTCDataChannel核心优势无插件、低延迟、端到端加密、P2P主要局限大规模场景、NAT 穿透、移动端兼容适用场景判断是否需要实时互动 │ ├── 是 ── 延迟要求 1s │ │ │ ├── 是 ── WebRTC │ │ │ └── 否 ── 考虑 RTMP/HLS │ └── 否 ── 考虑其他方案下一篇预告在下一篇文章中我们将深入探讨WebRTC 的架构设计包括浏览器中的 WebRTC 架构API 体系详解信令流程libwebrtc 媒体引擎结构参考资料WebRTC 1.0: Real-Time Communication Between Browsers - W3CWebRTC Official WebsiteHigh Performance Browser Networking - WebRTC ChapterGoogle’s WebRTC ProjectMDN Web Docs - WebRTC API