实现点对点视频通话需本地流采集、信令协调与p2p媒体传输协同:先用getusermedia获取并显示本地流,再配置rtcpeerconnection(含stun/turn),通过信令服务器交换sdp和ice候选建立连接,最后监听ontrack绑定远程流。

要在HTML5中用WebRTC实现浏览器点对点实时视频通话,关键不是“纯前端直连”,而是**本地流采集 + 信令协调 + P2P媒体传输**三者协同。媒体流确实走浏览器直连,但连接建立全程依赖服务端辅助——这点常被误解。
获取并显示本地音视频流
调用 navigator.mediaDevices.getUserMedia() 请求用户授权,拿到 MediaStream 后绑定到 <video></video> 元素:
- 必须显式声明
{ video: true, audio: true },部分浏览器禁用静音模式会拒绝仅音频请求; - 捕获失败时需提示权限问题或设备占用,不能只靠 console.error;
-
srcObject是标准写法,不要用已废弃的src+URL.createObjectURL()。
创建并配置 RTCPeerConnection
这是P2P连接的中枢,初始化时必须传入 ICE 服务器列表:
- 至少配一个公共 STUN 服务(如
stun:stun.l.google.com:19302),否则内网环境几乎必然失败; - 生产环境务必自建 TURN 服务器(如 coTURN),否则对称NAT用户无法互通;
- 添加本地轨道用
addTrack(track, stream),比旧式addStream()更精确、可单独控制轨道。
通过信令服务器交换连接信息
两个浏览器不知道彼此地址和能力,必须靠第三方中转 SDP 和 ICE 候选:
- 发起方调
createOffer()→setLocalDescription()→ 发送 offer 给对方; - 接收方收 offer →
setRemoteDescription()→createAnswer()→setLocalDescription()→ 发回 answer; - 双方持续监听
onicecandidate,把每个 candidate 通过信令通道发给对方,直到 candidate 为空。
接收并渲染远端视频流
连接就绪后,远端流会触发事件,直接绑定即可:
- 监听
ontrack(推荐)而非已废弃的onaddstream,它按轨道触发,适配多流场景; -
event.streams[0]就是对方 MediaStream,赋给remoteVideo.srcObject; - 若需多路视频(如会议),应按
event.track.id区分轨道,避免覆盖。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











