javascript - 在 webRTC 中,如果我使用 srflx 获得远程冰候选,这是否意味着连接应该有效?(编辑:不,这还不是全部)
问题描述
我正在尝试为我们的一位客户在现有的 ionic 3 项目中实施视频通话,我已将google 代码实验室用作样板代码,用于通过 Firebase 实时数据库发送报价和回答。您之前可能听说过(读过):“我的 webRTC 在外部网络中不起作用”,答案是:
- 使用你自己的 STUN 服务器,不要依赖像谷歌这样的免费 stun 服务器。
- 使用 TURN 服务器备份失败的 stun 尝试。
- 在实施之前了解 webRTC。
我想问的是:
在我当前的设置中(使用免费的 google stun 服务器)使用两个不同的网络进行测试,我看到使用 typ srflx 的远程候选人,我也看到了 typ host 但由于它是不同的网络,所以它对我没有兴趣,显然没有中继,因为没有 TURN 服务器。我还看到我正在为本地候选人提供 srflx,这是否意味着我的设置应该足以建立连接?我花了一些时间试图弄清楚这一点,我在这篇博文中找到了很多信息,但我无法完全调试这种情况。
假设我们想实现我们自己的 TURN/STUN 设置,我们的呼叫将几乎完全在同一个国家,所以我们不需要多个服务器。有人会对以下情况进行估计:1.每分钟需要多少数据需要一个视频通话(球场)?2.我们的客户喜欢他的项目的谷歌云服务,在谷歌云平台上为这个项目旋转一个TURN服务器需要多少钱(同样只是一个球场)?有没有关于最佳设置的想法(我在想 coturn 并且正在查看这个google coturn 实现)?
谢谢你们。
编辑:经过更多挖掘,我意识到我正在测试的不同网络之一位于对称 nat 后面,这是一个很好的 jsfiddle,用于测试我在这篇博文中找到的 nat 类型。在对称 nat 的情况下,收到的 iceCandidate 不适合连接,您必须拥有 TURN 服务器。所以我想这会处理第一部分。第二部分的任何其他数据将不胜感激。
解决方案
好的,所以在所有这些挖掘之后,我想我可以同意第三种表示法(不,我仍然没有完全理解它甚至没有接近),如果这可能对任何人有所帮助,我会分享我的经验。我被带入一个项目(ionic 3),并被告知要查找并实施视频聊天。我们选择了 webRTC。据我所知,webRTC 是唯一广泛使用的开源选项。在我们国家,大量的蜂窝用户落后于对称 nat,因此与他们的 p2p 将无法正常工作。我测试了一个 twilio TURN 服务,一切都立即开始工作。基本呼叫的粗略数字约为每分钟 1.5Mb。感谢任何偶然发现这一点并试图弄清楚他是否可以提供帮助的人。
推荐阅读
- dart - 如何使用颤振编写按下双后退按钮以退出应用程序
- python - 数据框:删除具有某些类型值的对象类型列
- androidx - AndroidX itemTouchListener
- angularjs - 如何让我的自定义 JavaScript 代码在 AngularJS MVC 中正常工作?
- git - Visual Studio 的源代码控制从 TFVC 自动切换到 Git
- gnuplot - 不同缩放 y 轴之间的填充曲线
- java - Android java.io.IOException: write failed: EBADF (Bad file number)
- ignite - “二进制类型具有不同的字段类型”在键或值中使用日期类型字段时出错
- sitecore - 我们如何在 sitecore 中以编程方式保存和检索下拉列表的选定值
- symfony - 当我使用来自另一个包的类时,Symfony setter 注入不会调用我的 setter