六、WebRTC中ICE的实现

2023-05-16

一、Candidate种类&优先级

高到底:host、srflx、prflx、relay.

同一局域网内通过host类型的Candidate在内网建立连接。

非同一局域网,隔断从STUN、TURN服务器中收集srflx和relay类型的Candidate。收集srflx类型Candidate时,ICE会尝试NAT打洞。如果打洞成功则使用P2P传输,否则使用TURN服务器中转数据。

二、ICE策略

RTCPeerConnection对象,输入参数RTCconfiguration是json格式。

三、P2P连接

1、NAT穿越原理

NAT就是一种地址映射技术,在内网地址和外网地址之间建立映射关系。内网主机向外网主机发送消息是。数据经过NAT层时,NAT会将数据爆头中源IP地址和源端口号替换为映射后的IP地址和端口号。反之亦然。

2、NAT类型

完全锥形、IP限制锥型、端口限制锥型、对称型。

穿越难度一次增大。

(1)完全锥型NAT

NAT打洞成功,所有知道该洞的主机均可通过该洞与内网主机通信。

NAT穿越多数使用UDP

(2)IP限制锥型NAT

NAT打洞成功,只有与之打洞成功的主机才能通过该洞与内网主机通信,其他外网主机即使知道洞口也不能与之通信。(要求同一IP主机,不区分端口)

(3)端口限制锥型NAT

同IP限制锥型NAT。(要求同一IP主机,并且要求是同一端口)

(4)对称型NAT

内网主机每次访问外网不同主机时,都会生成一个新洞。打洞成功率非常低。

3、NAT类型检测

需要两台STUN服务器,每台STUN服务器又需要两块网卡,每块网卡需要配置公网IP地址。

4、如何进行NAT穿越

四、网络中继

1、TURN协议中转数据

TURN协议底层依赖于STUN协议

TURN协议采用CS模式。

流程:

主机X TurnClient向TurnServer 3478端口发送Allocate指令。TurnServer分配对应的relay地址。

indication

指令Send indication(XOR-PEER-ADDRESS、DATA)

指令Data indication

tunnel机制

只需要在开始发送数据之前,发送ChannelBind指令将channel number与目标地址绑定一次即可。后面统一使用channel number就能找到发往的目的地。

2、WebRTC使用TURN协议

WebRTC收集到的Relay类型Candidate,只得就是通过TURN协议的Allocation指令分配的地址

3、STUN/TURN服务器的部署

云主机

STUN/TURN服务器是Google开源的coturn服务器。

使用trickle-ice工具进行测试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

六、WebRTC中ICE的实现 的相关文章

  • 本地网络上的 WebRTC? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我一直在阅读有关 WebRTC 的内容 它看起来非常有前途 我想制作一个简单的局域网游戏 自动连接同一网络上的人们 尽管我可以找到人们
  • 从 MediaStream 对象获取媒体详细信息(分辨率和帧速率)

    我正在捕获用户的相机 我想以尽可能最佳的分辨率捕获图片 所以我的代码类似于下面的代码片段 我想从传入流中读取分辨率详细信息 因此我可以将其设置为视频高度和宽度 我将用它来单击快照 我希望快照具有流提供的最佳质量 这可能吗 读取分辨率详细信息
  • 为 webRTC 使用特定端口

    当使用 webRTC 创建点对点音频连接时 如果用户位于路由器后面 我们使用的 STUN 服务器将返回公共 IP 现在在 ICE 对象中 我可以看到 rport 始终介于 50000 及以上 有没有办法使用特定端口 以便用户不必打开所有这些
  • 通过 Websocket 传输视频

    我正在尝试构建可以从双方传输视频的移动应用程序 即视频通话之类的东西 我研究了 webrtc 但这还没有为移动本机应用程序做好准备 无论如何 webrtc 正在做的是允许浏览器直接捕获相机和音频而不需要插件等 但在本机移动应用程序中捕获相机
  • 在 iOS 上读取实时摄像头流的 getUserMedia() 替代方案?

    我们正在使用 QuaggaJS 构建一个移动条形码扫描仪 它可以直接从设备的摄像头流中读取条形码 在桌面 Android 上运行良好 但在 iOS 上根本不起作用 从最初的研究来看 我发现 iOS 根本不支持 WebRTC getUserM
  • 未捕获的 ReferenceError:进程未定义简单对等 Javascript

    我目前正在学习 WebRTC 并使用 simple peer 和 React 和 Socket io 的 npm 包 当我尝试致电用户时 就会显示此错误 stream readable js 529 Uncaught ReferenceEr
  • Android WebRTC 自定义捕获器

    我已经编译了 webRTC 演示应用程序 我看到捕获帧是由VideoCaptureAndroid java与本机代码紧密耦合的文件 我需要添加将我自己的帧推送到 webRTC 库以在视频通道上发送的功能 我可以用 C NDK 或 Java
  • WebRTC 与 python

    我想用 python twisted 制作一个流服务器 它接收 WebRTC 视频流 然后对其应用一些 OpenCV 算法 但是我找不到 WebRTC 的 python 模块 如何使用 python twisted 发送和接收 WebRTC
  • 有没有办法使用 getUserMedia 减少延迟?

    在尝试减少视频延迟的同时WebRTC通信时 我测量了视频捕获和视频显示之间的延迟 为了防止测量 WebRTC 涉及的延迟 我只是使用getUserMedia和一个 HTMLvideo显示流 我通过每帧显示时间戳来做到这一点 使用reques
  • Django,如何生成没有模型的管理面板?

    我正在构建一个相当大的项目 基本上包括以下内容 服务器1 冰基服务 Glacier2 用于会话处理 允许访问 Glacier2 的防火墙 服务器2 通过 Glacier2 提供 Ice 服务的 Web 界面 读取 公共 通过 Glacier
  • 如何在 iOS 和 macOS 上的 Safari 中使用网络摄像头录制视频?

    我已经发布了几条路径 1 录制视频https caniuse com feat html media capture https caniuse com feat html media capture但它仅适用于 iOS 并且无法自定义 我
  • Libsourcey 缺少 -fPIC 编译错误

    我正在尝试运行 LibSourcey 以使用 Webrtc 流服务器 问题是我似乎无法让它发挥作用 我努力在我的 Ubuntu 16 04 上 cmake 该项目 cmake 文件中的正则表达式 但现在它已修复 我实际上遇到的问题是编译时的
  • 使用 HTML5 或 Javascript 的 P2P 视频会议

    我正在尝试使用 html5 和 javascript 构建视频会议 直到现在我能够流式传输我的相机捕获并将其显示在画布上 这是代码
  • 如何关闭 webrtc 数据通道?

    我无法使用以下方法 因为我只使用数据通道 不使用 getUserMedia
  • 如何在服务器上使用 ffmpeg 从 WebRTC 流获取音频和视频

    我正在尝试从 WebRTC 流获取音频和视频 并在 ubuntu 服务器上使用 ffmpeg 处理它 转码或转储 我天真地期望它能简单地解释 WebRTC 提供的 sdp 但我错了 我怀疑 ffmpeg 无法发回答案 sdp 必须手动完成
  • Node.js 中的 webRTC

    我想在node js 中使用webRTC 来管理涉及浏览器和nodejs 上的对等点的混合连接 我做了一些测试和搜索 我尝试使用wrtc https github com js platform node webrtc or webrtc
  • 为什么WebRTC需要ICE协议才能运行?

    据我了解 ICE协议用于发现从最终用户设备到 外部 的节点 设备 我不明白为什么需要它 数据包路由不是由路由器和交换机等网络设备负责吗 他们应该找到从网关到最终用户设备的最短路径 实际上 路由器会记住他们之前发现的那些路由 此外 NAT 协
  • 录制视频和音频并上传到服务器

    我想为网站添加视频录制功能 我一直在搜索并尝试所有可能的可用解决方案 但还没有任何工作正常 我已经尝试过以下解决方案 WebRTC 我知道使用 WebRTC 我们可以从网络摄像头和麦克风获取流 我发现了很多关于相同内容的文章 但没有一篇解释
  • 有没有办法使用 JSON 对象创建自己的 mediaStreamTrack?

    webRTC 上的 mediaStream 接口允许多个 MediaStreamTrack 这些不一定是来自相机 麦克风的音频和 或视频流 如何使用 JSON 对象创建 MediaStreamTrack 在最近的一次会议上主题 http l
  • 是否可以通过 WebRTC 进行屏幕共享来广播音频

    是否可以通过 WebRTC 进行屏幕共享来广播音频 简单的调用getUserMedia with audio true由于权限被拒绝错误而失败 是否有任何可以用来广播音频的工作环境 除了屏幕共享之外还会实现音频吗 Thanks 参考这个演示

随机推荐

  • 超强整理!PCB设计之电流与线宽的关系

    关于pcb线宽和电流的经验公式 xff0c 关系表和软件网上都很多 xff0c 本文把网上的整理了一下 xff0c 旨在给广大工程师在设计PCB板的时候提供方便 以下总结了八种电流与线宽的关系公式 xff0c 表和计算公式 xff0c 虽然
  • nginx 主动健康检查搭建详解(nginx_upstream_check_module)

    版本信息 nginx 1 21 1 下载nginx upstream check module模块 nginx upstream check module master zip wget https codeload github com
  • paddle推理部署(cpu)

    我没按照官方文档去做 xff0c 吐槽一下 xff0c 官方文档有点混乱 一 概述 总结起来 xff0c 就是用c 43 43 示例代码 xff0c 用一个模型做推理 二 示例代码下载 https www paddlepaddle org
  • Vector的用法

    我不知道大家是怎么理解Vector和怎样使用的 xff0c 这篇文章主要是发表我自己对于Vector的看法 xff0c 仅仅属于个人理解 xff0c 如果有什么错误 xff0c 也希望大家指正哈 目录 1 xff1a Vector的概念 2
  • float的表示

    xfeff xfeff 先说一下计算机中二进制的算法 xff1a 整数 整数的二进制算法大家应该很熟悉 xff0c 就是不断的除以2取余数 xff0c 然后将余数倒序排列 比如求9的二进制 xff1a 9 2 61 4 余 1 4 2 61
  • cmake系列(三)

    目录 多个源文件 同一目录 xff0c 多个源文件 多个源文件 同一目录 xff0c 多个源文件 本小节对应的源代码所在目录 xff1a Demo2 上面的例子只有单个源文件 现在假如把 power 函数单独写进一个名为 MathFunct
  • ORACLE 字符串聚合函数 strcat

    create or replace type strcat type as object currentstr varchar2 4000 currentseprator varchar2 8 static function ODCIAgg
  • 无人机器件选择参考

    无人机飞控 xff0c 引脚预留数量 1 xff0c 四路pwm 2 xff0c 无线通信spi 3 xff0c 陀螺仪通信用iic 4 xff0c 串口调试用uart 5 xff0c led灯用普通io 6 xff0c 电量检测和电机堵塞
  • 字节对齐的规则总结

    一 什么是字节对齐 为什么要对齐 现代计算机中内存空间都是按照byte划分的 xff0c 从理论上讲似乎对任何类型的变量的访问可以从任何地址开始 xff0c 但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问 xff0c 这就需要
  • C++中第三方库的一般使用方式(libxl库为例)

    本篇介绍如何使用C C 43 43 的第三方库 xff0c 学会使用第三方库很重要 xff0c 尤其对于使用C C 43 43 语言的人来说 xff0c 标准库能做的事不能说太少 xff0c 恰当的说应该是没那么有趣 学会使用第三方库 xf
  • 三相电动机用单相电源

    三相电机改为单相运行 单相电机配用电容不是越大越好 三相电动机用单相电源 三相电机改为单相运行 介绍几种简便易行的方法 xff0c 可以不改动电机内部绕组而将三相电机改为单相运行 有6 种 xff1a 一 加电容法 xff39 形接法的三相
  • curl_init()和curl_multi_init()多线程的速度比较

    来源 http www webkaka com tutorial php 2013 102843 php中curl init 的作用很大 xff0c 尤其是在抓取网页内容或文件信息的时候 xff0c 例如之前文章curl获得header检测
  • 连接两字符串函数

    include lt stdio h gt include 34 string h 34 char Strcat char s1 char s2 printf 34 连接之后的字符串为 xff1a 34 for s1 61 39 0 39
  • CAN通信数据帧介绍

    CAN通信有五个帧 xff0c 其中最重要的是数据帧 xff01 xff01 xff01 xff01 我们下面开始讨论数据帧 一 数据帧的格式 xff08 数据帧有七个段组成 xff09 xff0c 帧起始 表示数据帧开始的段 xff0c
  • STM32压力传感器信号采集-24位AD HX720 HX711 原理介绍

    我做过很多工业用压力采集产品 xff0c 用过很多高分辨率的AD芯片 xff0c 其中有两款值得推荐 一个是海芯科技出的HX711等24位AD xff0c 一个是塞普拉斯出的CS5532等24位AD 国产芯片和进口芯片有差距 xff0c 但
  • stm32实现网络音频-原理图单片机程序C#上位机程序

    电子可以一边玩 xff0c 一边研究 xff0c 网络音频这个课题特别适合电子爱好者 几方面的挑战如下 xff0c 单片机实现对接以太网 实时对音频流解码播放 xff0c 上位机配合单片机做音频流传输控制 xff0c 音频信号的对接放大处理
  • rosdep init and update Error

    rosdep init Error sudo rosdep init ERROR default sources list file already exists br etc ros rosdep sources list d 20 de
  • Postman汉化版本竟如此简单,全中文真香

    对于国内程序员来说 xff0c 外国开发软件的一个使用门槛是全英文的 xff0c 对于不熟悉各种专业术语的同学 xff0c 上手比较麻烦 因此有种方法就是使用汉化版的外国软件 xff0c 但 Postman 并没有汉化版本 但是postma
  • YOLOv5识别目标的实时坐标打印

    引言 这个功能看似鸡肋 xff0c 但对于无人机目标识别与追踪有重要意义 xff0c 通过目标在摄像头视野的坐标位置 xff0c 可以推算出无人机相对与目标的位置 xff0c 从而对无人机进行位置矫正 因此 xff0c 添加代码打印坐标并不
  • 六、WebRTC中ICE的实现

    一 Candidate种类 amp 优先级 高到底 xff1a host srflx prflx relay 同一局域网内通过host类型的Candidate在内网建立连接 非同一局域网 xff0c 隔断从STUN TURN服务器中收集sr