0

0

javascript的WebRTC是什么_如何实现点对点的视频通话?

幻影之瞳

幻影之瞳

发布时间:2025-12-27 18:06:45

|

587人浏览过

|

来源于php中文网

原创

WebRTC是浏览器原生支持的实时音视频通信技术,核心组件包括MediaStream(获取音视频)、RTCPeerConnection(建立P2P连接)和RTCDataChannel(传输数据),需信令服务器交换SDP和ICE候选者,并依赖STUN/TURN穿透NAT。

javascript的webrtc是什么_如何实现点对点的视频通话?

WebRTC(Web Real-Time Communication)是浏览器原生支持的实时音视频通信技术,无需插件即可实现点对点(P2P)的视频通话、音频通话和数据传输。它直接在浏览器中运行,核心能力包括媒体采集、编解码、网络传输和连接建立,关键在于用 JavaScript 控制整个流程。

WebRTC 的三个核心组件

要实现点对点视频通话,离不开以下三部分协同工作:

  • MediaStream(获取音视频):通过 navigator.mediaDevices.getUserMedia() 获取本地摄像头和麦克风流,生成 MediaStream 对象,可直接绑定到 <video> 标签播放。
  • RTCPeerConnection(建立P2P连接):负责加密、传输、重传、带宽自适应等,是 WebRTC 的“通信管道”。它不关心信令,但依赖信令交换 SDP 和 ICE 候选者。
  • RTCDataChannel(可选,传数据):在已建立的 P2P 连接上双向传输任意二进制或文本数据,适合聊天、共享白板等场景。

为什么需要信令服务器?

RTCPeerConnection 本身不负责发现对方或传递连接信息。两个浏览器必须先交换三类关键信息才能连通:

  • SDP(Session Description Protocol):描述本端支持的编解码器、分辨率、传输协议等,分为 offer(发起方创建)和 answer(应答方返回)。
  • ICE 候选者(ICE Candidates):可能的网络路径,比如本机 IP、公网 STUN 地址、中继 TURN 地址。双方需互相告知所有候选者,让 RTCPeerConnection 自动选择最优链路。
  • 这些信息不能靠 WebRTC 自己传递,必须借助外部通道——即信令服务器(如 WebSocket、Socket.IO、甚至 HTTP 轮询)。它只负责“递纸条”,不参与媒体传输。

实现视频通话的典型流程

以 A 主叫 B 为例,简化步骤如下:

Rose.ai
Rose.ai

一个云数据平台,帮助用户发现、可视化数据

下载

立即学习Java免费学习笔记(深入)”;

  • A 调用 getUserMedia 获取本地流 → 添加到 RTCPeerConnectionaddTrackaddStream)→ 调用 createOffer()setLocalDescription(offer) → 通过信令服务器把 offer 发给 B。
  • B 收到 offer → 创建自己的 RTCPeerConnectionsetRemoteDescription(offer) → 调用 createAnswer()setLocalDescription(answer) → 把 answer 发回 A。
  • A 收到 answer → setRemoteDescription(answer);B 在收集到 ICE 候选者后,通过信令逐个发给 A;A 同样将自己收集到的候选者发给 B。
  • 双方都收到对方的候选者并调用 addIceCandidate() 后,若网络可达,连接自动建立,ontrack 事件触发,远端视频流即可渲染到页面。

绕不开的 NAT/防火墙:STUN 与 TURN

大多数用户处于路由器后(私有 IP),无法被直接访问。WebRTC 用以下方式解决连接问题:

  • STUN 服务器:帮助客户端发现自己的公网 IP 和端口(即“我在外网看起来是什么地址”),适用于大多数对称性不强的 NAT 环境。免费可用(如 stun:stun.l.google.com:19302)。
  • TURN 服务器:当 STUN 失败(如企业级对称 NAT 或防火墙严格拦截),TURN 充当中继,所有音视频流经其转发。需自行部署或使用商业服务(如 Twilio Network Traversal Service)。
  • 实际配置中,通常同时提供 STUN 和 TURN 服务器地址给 RTCPeerConnection,由其自动按优先级尝试连接路径。

不复杂但容易忽略。真正写起来要处理错误回调、连接状态监听(iceConnectionState)、流事件(ontrackonremovetrack)、重连逻辑和兼容性(如 Safari 对某些 API 的差异)。但只要理清信令职责、SDP 生命周期和 ICE 流程,一个基础双人视频通话就能跑通。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

336

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

776

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

97

2025.08.19

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

495

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

450

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

3579

2024.03.12

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2915

2024.08.16

Golang WebSocket与实时通信开发
Golang WebSocket与实时通信开发

本专题系统讲解 Golang 在 WebSocket 开发中的应用,涵盖 WebSocket 协议、连接管理、消息推送、心跳机制、群聊功能与广播系统的实现。通过构建实际的聊天应用或实时数据推送系统,帮助开发者掌握 如何使用 Golang 构建高效、可靠的实时通信系统,提高并发处理与系统的可扩展性。

30

2025.12.22

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

25

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 6万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.4万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号