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 对象,可直接绑定到 标签播放。
  • 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 为例,简化步骤如下:

Design
Design

Design平台的AI设计工具,AI logo设计、AI背景去除、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

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

豆包大模型
豆包大模型

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

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

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

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

315

2023.10.17

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

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

748

2023.10.18

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

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

91

2025.08.19

http500解决方法
http500解决方法

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

411

2023.11.09

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

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

418

2023.11.14

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

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

2236

2024.03.12

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

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

2068

2024.08.16

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

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

22

2025.12.22

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

热门下载

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

精品课程

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

共58课时 | 4.2万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

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

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