当前位置: 首页 > news >正文

WebRTC学习中各项概念笔记

本文摘要:本文对比了WebSocket与WebRTC的技术特点及应用场景。WebSocket是基于HTTP升级的应用层协议,提供全双工实时通信,负责WebRTC中的信令传输(如呼叫控制、SDP交换);而WebRTC则在传输层直接处理音视频数据流。SDP协议作为会话描述,通过文本格式协商媒体参数(编码、端口等)。ICE候选机制通过收集本地、STUN反射和TURN中继地址,按优先级自动选择最优网络路径。二者协作实现Web实时通信:WebSocket简化信令传输,WebRTC专注媒体处理,共同克服NAT穿透等网络挑战。

webSocket

webSocket与WebRTC区别

Socket(套接字)

  • 层级:传输层(TCP/UDP)

  • 作用:操作系统级别的网络通信接口

  • 特点

    • 需要处理字节流、数据包重组

    • 需要手动处理连接、断开、重连

    • 跨平台兼容性差

WebSocket

  • 层级:应用层(基于HTTP升级)

  • 作用:全双工实时通信协议

  • 特点

    • 基于HTTP 101协议升级

    • 自动处理连接状态

    • 浏览器原生支持

为什么选择webSocket

在WebRTC中的角色

  • WebSocket负责信令传输(呼叫控制、SDP交换)

  • WebRTC负责媒体传输(音视频数据流)

  • 两者分工合作,各司其职

简单来说:WebSocket是"高级版"的Socket,专门为Web环境优化,让开发者专注于业务逻辑而不是网络细节。

技术层级关系

WebSocket(简称WS)是一种全双工通信协议,它是现代Web实时通信的基础技术。以下是通俗易懂的解释:

本质:建立在TCP连接之上的高级协议

  • 就像在普通电话线上开通了视频通话功能

  • 底层还是走TCP,但增加了更智能的通信能力

在项目中的作用

  • 传输信令消息(如:"用户A想呼叫用户B")

  • 交换网络信息(ICE候选地址)

  • 同步通话状态(接通/挂断)

与传统Socket的区别

特性原生SocketWebSocket
协议层级传输层(TCP/UDP)应用层(基于HTTP升级)
数据格式原始字节流结构化消息
浏览器支持不支持原生支持
连接建立手动三次握手HTTP 101协议切换

SDP的作用和内容

SDP(Session Description Protocol)是会话描述协议,它就像是WebRTC通话的"合同"或"菜单",详细说明了通话的技术规格。

1. SDP的本质

  • 作用:描述媒体会话的"技术规格说明书"

  • 格式:文本协议,类似配置文件

  • 内容:说明音视频编码、网络地址、带宽要求等

2. 在您项目中的具体体现

Offer SDP示例(主叫方生成):

v=0
o=- 123456 2 IN IP4 192.168.1.100
s=WebRTC通话
t=0 0
m=audio 50000 RTP/AVP 111
a=rtpmap:111 opus/48000/2
m=video 50002 RTP/AVP 107
a=rtpmap:107 VP8/90000

Answer SDP示例(被叫方回复):

v=0
o=- 654321 2 IN IP4 192.168.1.101  
s=WebRTC通话
t=0 0
m=audio 60000 RTP/AVP 111
a=rtpmap:111 opus/48000/2
m=video 60002 RTP/AVP 107
a=rtpmap:107 VP8/90000

  • m=media:媒体类型(audio/video)和端口
  • a=attribute:编码器、带宽等参数
  • c=connection:网络连接信息
  • o=origin:会话创建者标识

SDP就是双方在通话前先确认"我们都能支持哪些音视频格式,用什么参数来通信",确保技术兼容性。

各变量解释:

server/server.js

  1. express:通过require('express')引入的Express框架实例

  2. http:Node.js内置HTTP模块

  3. path:Node.js路径处理模块

  4. SignalingServer:从./signaling导入的自定义信令服务器类

  5. app:Express应用实例,由express()创建

  6. server:HTTP服务器实例,由http.createServer()创建

  7. PORT:服务器监听端口,从环境变量或默认值3000获取

  8. __dirname:Node.js提供的当前文件所在目录路径

server/signaling.js

  1. WebSocket:通过require('ws')引入的WebSocket库

  2. uuidv4:UUID生成函数

  3. UserManager:用户管理类

  4. this.wss:WebSocket服务器实例

  5. this.userManager:UserManager实例

  6. ws:WebSocket连接对象(参数传递)

  7. message:收到的WebSocket消息(参数传递)

  8. data:消息数据对象(从message解构)

  9. userName/userId:用户信息(从data解构)

  10. offer/answer:WebRTC会话描述(参数传递)

  11. candidate:ICE候选信息(参数传递)

server/user-manager.js

  1. this.users:Map结构,存储用户ID到用户对象的映射

  2. this.userSockets:Map结构,存储WebSocket到用户的映射

  3. user:临时用户对象(局部变量)

client/js/webrtc-client.js

  1. this.ws:WebSocket连接实例

  2. this.peerConnection:RTCPeerConnection实例

  3. this.localStream/remoteStream:媒体流对象

  4. this.rtcConfig:WebRTC配置对象

  5. event:事件对象(参数传递)

  6. track:媒体轨道(局部变量)

  7. offer/answer:WebRTC会话描述(局部变量)

client/js/auth.js

  1. userName:从输入框获取的用户名

  2. errorMessage:错误提示DOM元素

  3. savedUserName:从localStorage读取的用户名

client/js/ui.js

  1. webrtcClient:全局WebRTC客户端实例

  2. e:键盘事件对象(参数传递)

变量未定义但可用的原因:

  1. 全局对象:如documentwindowconsole等浏览器环境全局对象

  2. 模块导出:通过require()引入的模块(如WebSocket

  3. 闭包捕获:箭头函数捕获的外部作用域变量

  4. 参数传递:函数调用时传入的参数

  5. 类成员变量:通过this.定义的变量在整个类中可用

ICE候选

根据搜索结果,ICE候选(ICE candidates)是WebRTC中用于建立网络连接的关键概念,我来为您总结核心要点:

基本定义

  • ICE候选是WebRTC用于建立P2P连接的网络地址信息

  • 包含IP地址、端口、协议类型和优先级等信息

  • 格式示例:a=candidate:1 1 udp 2122260223 192.168.1.2 56143 typ host

候选类型

  • Host候选:本地网络接口的IP地址(如192.168.x.x)

  • Server Reflexive候选:通过STUN服务器获取的NAT映射后的公网地址

  • Relay候选:通过TURN服务器分配的中继地址(最后备用方案)

工作流程

  1. 收集所有可能的候选地址
  2. 通过信令服务器交换候选列表
  3. 进行连通性检查(STUN探测)
  4. 选择最优连接路径(基于优先级和网络状况)

优先级规则

  • 本地直连(Host) > STUN反射 > TURN中继

  • 计算公式:(2^24)*类型权重 + (2^8)*本地权重 + 组件ID

实际应用

  • 在复杂网络环境(如多层NAT)中自动寻找可用路径

  • 当直接连接失败时自动降级使用中继

  • 支持网络切换时的动态重连

http://www.dtcms.com/a/549823.html

相关文章:

  • 外包网站问些什么问题一个网站可以做几级链接
  • 网站开发商怎么关闭图片显示上海网站外包
  • K8s练习
  • 订阅飞书审批事件
  • 网站被降权怎么办河北政务服务网
  • ELEMENT_ERF 1150X_CASSETTE装配(ERF1150 OR EDT1150多国语言)
  • 网站备案撤销再备案英国做电商网站有哪些方面
  • 网站开发 税率wordpress 网站打不开
  • 永乐视频网页入口 - 免费高清影视在线观看网站
  • 砂轮姿态调整的几何艺术:摆角与抬角变换的数学原理
  • 下行数据处理模块(DownFrame_PKG) v2.0:架构优化与流水线创新
  • 从无状态到有状态,LLM的“记忆”进化之路
  • 公司网站开发 中山网站建设選宙斯王
  • 用php做电商网站展馆设计公司排名
  • Bootstrap 标签页
  • 做亚马逊有哪些网站可以清货亚泰润德建设有限公司网站
  • [Ai Agent] 05 LangChain Agents 实战:从 ReAct 到带记忆的流式智能体
  • 网站建设信用卡取消店铺小程序如何开通
  • 【React Fiber的重要属性】
  • React 模块化Axios封装请求 统一响应格式 请求统一处理
  • React 页面路由ReactRouter 路由跳转 参数传递 路由配置 嵌套路由
  • C++ 分治 归并排序解决问题 力扣 LCR 170. 交易逆序对的总数 题解 每日一题
  • 贵州省住房与城乡建设部网站国内论坛网站有哪些
  • React 状态管理库相关收录
  • 深圳手机网站设计公司wordpress外链404
  • C/C++中的二级指针使用
  • 用dw做红米网站网站管理助手v3
  • 网站建设电话话术有趣软文广告经典案例
  • Fetch API 返回值获取方法
  • 机器学习-导师优选