iceConnectionState 已断开连接(通过互联网使用时)

2024-02-11

这个问题以前曾被问过,但我还没有找到答案。我基本上遇到了与描述相同的问题here https://stackoverflow.com/questions/34405816/peerjs-webrtc-iceconnectionstate-failed and here https://stackoverflow.com/questions/31750312/webrtc-with-peerjs-iceconnectionstate-disconnected.

我正在尝试使用 PeerJS 建立 webRTC 连接。它在局域网中完美运行,但我无法让它在互联网上运行。我使用 coturn 作为 TURN 服务器,但到目前为止这还没有解决问题。Chromium 控制台打印出以下内容:

PeerJS:  Added ICE candidate for: client1
peer.js:1476 PeerJS:  Set remoteDescription: ANSWER for: client1
peer.js:1476 PeerJS:  Set remoteDescription: OFFER for: client1
peer.js:1476 PeerJS:  Set remoteDescription: ANSWER for: client1
peer.js:1476 PeerJS:  Received remote stream
peer.js:1476 PeerJS:  Receiving stream MediaStream
peer.js:1476 PeerJS:  Created answer.
peer.js:1476 PeerJS:  Set localDescription: answer for: client1
3peer.js:1476 PeerJS:  Received ICE candidates for: client1
3peer.js:1476 PeerJS:  Added ICE candidate for: client1
peer.js:1476 PeerJS:  iceConnectionState is disconnected, closing connections to client1
peer.js:1476 PeerJS:  Cleaning up PeerConnection to client1
2peer.js:1476 PeerJS:  iceConnectionState is disconnected, closing connections to client1

我正在使用的对等对象如下所示:

var peer = new Peer(
    GetURLParameter('id'),
    { key: peerKey, debug: peerDebug},
    {config:
        { 'iceServers': [
            { url: 'stun:[server ip here]:3478'},
            { url: 'turn:[server ip here]:3478'}
        ]}
    }
);

coturn 在使用turnserver -L [服务器ip] 启动turnserver 后,打印出以下内容:

0: Relay address to use: [server ip here]
0: pid file created: /var/run/turnserver.pid
0: IO method (main listener thread): epoll (with changelist)
0: WARNING: I cannot support STUN CHANGE_REQUEST functionality because only one IP address is provided
0: Wait for relay ports initialization...
0:   relay [server ip here] initialization...
0:   relay [server ip here] initialization done
0: Relay ports initialization done
0: IO method (general relay thread): epoll (with changelist)
0: turn server id=0 created
0: IPv4. UDP listener opened on: [server ip here]:3478
0: IPv4. TCP listener opened on : [server ip here]:3478
0: Total UDP servers: 1
0: Total General servers: 1
0: IO method (cli thread): epoll (with changelist)
0: IPv4. CLI listener opened on : 127.0.0.1:5766
0: IO method (auth thread): epoll (with changelist)

最后,因为我猜这可能是一个安全问题,所以我的 iptables 配置目前如下所示:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:3478
ACCEPT     udp  --  anywhere             anywhere             udp dpt:3478

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:3478
ACCEPT     udp  --  anywhere             anywhere             udp dpt:3478

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:3478
ACCEPT     udp  --  anywhere             anywhere             udp dpt:3478

有人知道如何让这个东西发挥作用吗?任何帮助将不胜感激!

EDIT:事实证明我的 TURN 配置 JSON 很混乱。我的新对等对象现在看起来像这样:

var peer = new Peer(
    GetURLParameter('id'), {
        key: peerKey,
        debug: peerDebug,
        config: {
            'iceServers': [
                { url: 'stun:[server ip]:3478'},
                { url: 'turn:[server ip]:3478'}
            ]
        }
    }
);

这给了我更多关于 TURN 服务器的反馈(所以我想我正朝着正确的方向前进) - 但问题仍然存在。


EDIT2:嗯,事情变得很奇怪。这似乎是某种跨浏览器兼容性问题。使用 mido 建议的 TURN 服务器测试工具,我在 Firefox 中得到的结果与在 Chromium 中得到的结果不同。我打算使用 Chromium,因为它的 kiosk 模式对我的应用程序来说非常方便。但回到回合服务器。在 Firefox 中,当使用用户帐户时,一切似乎都工作正常: github测试页面的输出:

0.004   1   host    0   UDP 192.168.178.28  39919   126 | 32512 | 255
0.005   2   host    0   UDP 192.168.178.28  56123   126 | 32512 | 254
0.076   1   srflx   1   UDP 178.39.74.108   39919   100 | 32543 | 255
0.077   1   relay   2   UDP [Server IP ]    52147   5 | 32543 | 255
0.098   2   srflx   1   UDP 178.39.74.108   56123   100 | 32543 | 254
0.099   2   relay   2   UDP [Server IP ]    60002   5 | 32543 | 254
0.099   Done

然而,允许匿名访问 TURN 服务器并尝试在没有用户名和密码的情况下登录,绝对不会发生任何事情。

Chromium 中的不同情况:提供用户名和密码后,会发生以下情况:

0.002   1   host    138421141   udp 192.168.178.28  42343   126 | 30 | 255
0.002   2   host    138421141   udp 192.168.178.28  49001   126 | 30 | 254
0.028   1   srflx   842163049   udp 178.39.74.108   42343   100 | 30 | 255
0.049   2   srflx   842163049   udp 178.39.74.108   49001   100 | 30 | 254

...而 TURN 服务器上的终端一遍又一遍地打印出 401 错误消息。在我看来,使用 Chromium 时凭证永远不会到达服务器。 401 错误消息指出用户名为空。

我真的可以用 Chromium 来做这件事。有谁知道如何让它发挥作用吗?


请检查您的回合服务器上的防火墙设置。

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

iceConnectionState 已断开连接(通过互联网使用时) 的相关文章

  • Imgur API 版本 3 JavaScript 上传示例

    我在网上找到的所有示例都是早期版本的 Imgur API 或非 JS 代码 所有这些都使用新 API 中不存在的 API 密钥 相反 你会得到一个client id and secret 任何人都有示例代码 展示如何使用其 API 版本 3
  • 使用画布元素作为文本区域

    我正在寻找有关如何使用类似于文本区域的画布元素的直接描述 我见过这样的项目Ace http ace ajax org 只是想知道如何像文本区域一样写入该区域 只是纯文本 没有什么花哨的 提前致谢 Ace 曾经是 Mozilla Skywri
  • 在 HTML5 中使用 JS 创建内联 SVG

    我正在使用本地 HTML5 文件 它有在顶部 我在里面放了这样的东西
  • AWS Lambda 提前结束(没有任何显式返回或回调)

    我在放入 AWS Lambda 中的一些 Node js 代码时遇到了一些问题 我需要进行几个异步调用 虽然第一个调用的行为符合我的预期 但 lambda 函数在第二个调用完成之前终止 返回值为 null 这让我认为 lambda 正在执行
  • 将组件注册到现有的 Vue.js 实例

    我是 Vue js 新手 我想注册一个本地组件 如下所述 https v2 vuejs org v2 guide components html Local Registration https v2 vuejs org v2 guide
  • Amcharts 图表 - 图表列到自定义 URL 的超链接以在新选项卡/窗口中打开

    我正在尝试制作一个 amcharts 图表 其中的列链接到自定义网址 并希望网址在新选项卡 窗口中打开 我尝试将此代码添加到图形对象中 但它不起作用 它在同一选项卡 窗口中打开链接 listeners event clickItem met
  • RequireJS 文本插件和变量连接字符串

    我正在使用 RequireJS 文本插件来加载一些 html 模板 当我将字符串文字传递给 require 函数时 它工作正常 var templateHTML require text templates template name ht
  • SVG 中三角形的圆角

    我正在尝试制作一个具有圆角的三角形 三角形将如下所示 左下角是唯一看起来相当容易制作的角 主要是因为这是一个 90 度的 转弯 该转弯是使用QSVG 中的命令具有以下参数 Q x y height x y height RADIUS从我正在
  • 禁用整个站点的 IE8 加速器

    是的 我知道有类似的问题 https stackoverflow com questions 499565 is it possible to disable ie8 accelerators on my website在 SO 上 但它已
  • 属性访问器(getter)的扩展运算符问题

    我很难理解为什么以下代码存在一些问题https jsfiddle net q4w6e3n3 3 https jsfiddle net q4w6e3n3 3 Note 所有示例均在 chrome 版本 52 0 2743 116 中进行测试
  • 自 2012 年 6 月 12 日以来,“未定义”随机附加在我网站上 1% 的请求网址中

    自 2012 年 6 月 12 日 11 20 TU 起 我在我的 varnish apache 日志中看到非常奇怪的错误 有时 当用户请求一页时 几秒钟后我会看到类似的请求 但 url 中最后一个 之后的所有字符串已被 未定义 替换 例子
  • 更改特定字符串的颜色

    有谁知道如果将特定单词输入文本区域 我如何更改它的颜色 例如 如果用户输入 你好我的朋友 它会动态地将 你好 更改为绿色 在google上花了很多时间 找不到任何相关的东西 谢谢 textareas 的设计目的不是选择性着色
  • 大型应用的回流/布局性能

    我正在使用 GWT 构建一个 HTML 应用程序 其性能总体上是正确的 有时 它会加载 DOM 中的许多对象 并且应用程序会变得很慢 我使用 Chrome 开发者工具分析器来查看时间花在哪里 在 Chrome 下 一旦应用程序被编译 即没有
  • 清理 html 字符串中的所有脚本

    HTML5 剪贴板很棒 但我正在寻找一种使其安全的方法 用户正在将文本 html 粘贴到我的网页中 这允许他们粘贴图像 表格等 我正在寻找一种方法 在将粘贴的内容添加到页面之前删除所有脚本 我需要删除
  • 表单序列化javascript(无框架)

    想知道 javascript 中是否有一个没有 jquery 或任何框架的函数可以让我序列化表单并访问序列化版本 2023 年更新 Use FormData https developer mozilla org en US docs We
  • 如何上传文件 - sails.js

    我可以下载图像和 pdf 但无法下载文档文件 doc pptx odt 下载文档 doc pptx odt 时 仅将其下载为 ZIP XML 文件 我可以做什么 我在用着 填写上传文件文档 https github com balderda
  • Google 地图 InfoBubble PixelOffset(从标记上方的默认位置移动)

    我正在尝试实现一个自定义 infoBubble 它的框打开到标记的侧面 而不是顶部的默认位置 事实证明这比预期的要困难 使用普通的infoWindow 您可以使用pixelOffset 请参阅此处文档 https developers go
  • 在多个数组中搜索字符串,然后设置 var - jQuery

    我正在寻找基于字符串存在于哪个数组中设置一个变量 例如 var primary red blue yellow var secondary orange purple green 然后检查 purple 并返回它在 secondary 数组
  • 如何仅突出显示嵌套表的最里面的表行?

    我有几个嵌套表 我想突出显示鼠标指针下方的最里面的行 我怎样才能做到这一点 一些提示 我使用嵌套表来显示递归表格数据 表可以嵌套 10 层 嵌套正如您所期望的那样 table tr td table tr td table tr td 可能
  • 角度 ng-repeat 根据条件添加样式

    我在 div 列表上使用 ng repeat 并且在渲染此 div 的 json 中手动添加项目 我需要定位我在 json 中添加的最后一个 div 它会自动在屏幕上渲染 即 couse 光标所在的位置 其余部分保持在相同位置 但没有给出渲

随机推荐

  • @cc_on 在 JavaScript 中意味着什么?

    有时我看到 cc on在 JavaScript 中 这是什么意思 这是为了条件编译 http en wikipedia org wiki Conditional comment Conditional Comment in JScript
  • 如何将Yolo格式边界框坐标转换为OpenCV格式

    I have Yolo格式化保存在 a 中的对象的边界框注释 txt文件 现在我想加载这些坐标并使用它在图像上绘制它OpenCV 但我不知道如何将浮点值转换为OpenCV格式化坐标值 我试过这个post https stackoverflo
  • Spring 应用程序在 8 小时后失去与 MySql 的连接。如何正确配置?

    我有一个 Spring 应用程序 我相信它使用 DBCP 连接池来连接到 MySql 数据库 我说 相信 因为这不是我非常擅长的领域 并且我不确定是否一切都设置正确 我运行该应用程序没有任何问题 一切都工作正常 问题在一夜之间就出现了 该应
  • 将某些页面功能或用户界面限制为 Asp.Net 中经过身份验证的用户

    我在用Asp Net C 构建一个应用程序 我正在使用Forms Authentication 我有一个要求 使得我的许多authenticated not anonymous users仅限于某些页面功能或用户界面 我猜Login Con
  • 如何使用 pandas 根据多个字符串索引拆分列

    我想根据几个索引将每一行拆分为新列 6ABCDE0218594STRING to 6 ABCDE 021 8594 STRING 这似乎以前至少被问过一次 但我一直只找到问题的变体 用分隔符分隔 如pandas 如何将一列中的文本拆分为多行
  • 带有内嵌图像的 JEditorPane

    我正在尝试在 Java JEditorPane 中显示内联图像 下面的代码使用的 HTML 内容可以在 Firefox 中正确显示图像 但不能在 JEditorPane 中显示 有什么想法吗 谢谢 import javax swing im
  • Python索引错误值不在列表中...on .index(value)

    我是Python的初学者 对于那些对我的帖子持负面想法的人 请离开 我只是在这里寻求帮助并尝试学习 我正在尝试在一个简单的数据集中检查 0 和 1 这将用于在平面图上定义空隙和实体 以定义建筑物中的区域 最终 0 和 1 将被坐标替换 我收
  • 在元素的父元素之后插入

    在下面的示例中 我需要什么样的选择器才能插入 test3 类的父级 divouter 之后 谢谢 div class divouter div class divinner div div
  • 如何在浏览器中使用模块,同时也引用 DevTools 中的变量和函数?

    我的 HTML 设置如下 所有 ES6 模块都工作正常 唯一的问题是我现在无法引用 DevTools 中的任何内容 例如使用控制台并输入变量以查看其值或手动使用函数 如何在能够使用 DevTools 的同时导入模块 谢谢 在 DevTool
  • Maven2:如何确定 Maven 构建正在使用特定的插件版本?

    我刚刚发现 Maven 插件管理听起来很奇怪 在进行网站生成时 我想使用特定版本的 Maven 网站插件 以便实现特定的功能 假设我想使用这个插件的 2 0 1 版本 如果我使用 POM 的报告部分来使用以下命令生成项目站点 mvn sit
  • Phonegap 软键盘覆盖输入字段[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我的 Phonegap 3 1 中的软键盘覆盖了我的 Android 4 x 中的输入字段 这个问题一直很烦人 我刚才差点就发帖问了 但突然
  • 是否可以将react-datepicker与react hooks表单一起使用?

    是否可以将react datepicker与react hooks表单一起使用 我尝试了以下示例 但没有运气 import React useState from react import styles css import useForm
  • 将字符串解析为 DirectoryInfo 的正确方法? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个程序 为了避免复杂化 我需要将给定的字符串变量解析为 DirectoryInfo 我想知道是否可以将字符串解析为 Direc
  • 如何制作骨头形状的纽扣

    我目前正在为我的网站试验一个按钮 我希望它看起来像一个普通按钮 但是一旦你将其悬停 它就会变成一根骨头 我的网站是关于狗的 所以我使用了一个已经存在的 codepen 项目 最终得到了这个 root bg 1a1e24 color eee
  • 使用 jQuery 重复元素

    我确信这对于正确的人来说是显而易见的 但是如何使用 jQuery 重复一个元素呢 本质上 我希望 jQuery 无限次重复内联元素 就像您使用 CSS 来重复背景纹理的图形一样 我一直在研究 clone 和 each 但确实可以使用一些指针
  • AngularJS:指令隔离范围 - 范围变量未定义

    请有人能给我解释一下为什么吗attrDir的范围变量是可见的 并且oneWay不是吗 我以为scope 也是孤立的 angular module test angular module test directive attrDir attr
  • 访问项目资源中的图像?

    如何在运行时访问已添加到项目资源中的图像 我希望能够做这样的事情 if value picBox1 image Resources imageA else picBox2 image Resources imageB Something I
  • MongoDB toArray 性能

    我正在尝试从 Mongo Node 中的术语集合构建类别树 但首先我使用 in 选择所有树元素 console time termsCol find var terms await termsCol find term id in flat
  • gitlab API有速率限制吗

    github对OAuth客户端的速率限制为5000 小时 但我找不到相同的信息gitlab 除了创建新用户和重置密码6次 分钟 是否意味着没有限制 答案是不再是 不 https gitlab com gitlab org gitlab ru
  • iceConnectionState 已断开连接(通过互联网使用时)

    这个问题以前曾被问过 但我还没有找到答案 我基本上遇到了与描述相同的问题here https stackoverflow com questions 34405816 peerjs webrtc iceconnectionstate fai