WebRTC通过JavaScript调用浏览器API实现端到端音视频传输,不依赖插件。1. 使用navigator.mediaDevices.getUserMedia()获取本地音视频流,绑定到标签预览;2. 创建RTCPeerConnection实例,配置STUN/TURN服务器穿越NAT;3. 将本地流添加至连接并监听ontrack接收远程流;4. 通过信令服务器交换SDP(createOffer/setDescription)和ICE候选;5. 监听iceconnectionstatechange处理连接状态,异常时提示用户;6. 结束后调用close()释放资源。核心在于异步流程与信令交互的协调。

WebRTC 实现端到端音视频传输,JavaScript 通过调用浏览器提供的 API 来完成设备访问、连接建立和数据流控制。整个过程不依赖插件,直接在浏览器间传输音视频数据。
获取本地媒体流
使用 navigator.mediaDevices.getUserMedia() 请求访问用户的摄像头和麦克风。该方法返回一个 Promise,解析为包含音视频轨道的 MediaStream 对象。
- 通过配置对象指定需要的媒体类型,例如:{ video: true, audio: true }
- 将获取到的流绑定到 元素,实现本地预览
建立对等连接(PeerConnection)
RTCPeerConnection 是核心对象,负责管理两个浏览器之间的连接和数据传输。
- 创建实例时可传入 ICE 服务器配置(如 STUN/TURN),帮助穿越 NAT 和防火墙
- 将本地流添加到连接:pc.addTrack(stream.getTracks(), stream)
- 监听远程流事件:pc.ontrack,当对方发送流时触发
信令交换 SDP 与 ICE 候选
WebRTC 不定义信令协议,JavaScript 需借助 WebSocket 或其他方式交换连接信息。
立即学习“Java免费学习笔记(深入)”;
- 调用 pc.createOffer() 发起连接,生成本地描述(SDP)
- 设置本地描述后,通过信令服务器发送给对方
- 收到对方的 SDP 后,调用 pc.setRemoteDescription()
- ICE 候选通过 pc.onicecandidate 事件收集并转发给对方
处理连接状态与错误
实际应用中需监听连接状态变化,确保通信稳定。
- 监听 pc.iceconnectionstatechange 判断连接是否中断
- 处理网络切换、权限拒绝等异常情况,提供用户提示
- 连接结束后调用 pc.close() 释放资源
基本上就这些。JavaScript 通过标准 API 协调媒体采集、加密传输和网络协商,真正实现了浏览器间的实时音视频通信。关键在于正确处理异步流程和信令交互。










