iOS 和 Safari 11 WebRTC 不收集 STUN/TURN Trickle ICE 候选者

2024-02-08

在 iOS 11(iPhone 5s 和 iPhone 7)或桌面上使用 Safari 11 时,我的 Web 应用程序无法通过 CoTURN 服务器收集 WebRTC 中继 ICE 候选项。 Web 应用程序(建立单向音频 WebRTC 对等连接)在真实浏览器(Chrome 和 Firefox)之间直接或通过 CoTURN 中继运行良好,我通常在这些浏览器上获得 6-15 个 ICE 候选者。

我在接收端对 getUserMedia 进行了(坦率地说,不必要的)调用,这允许 Safari 生成主机 ICE 候选者。 (注意...用户must在 Safari 提供主机 Ice Candidates 之前批准音频和/或视频访问,即使在仅接收端也是如此。我已经克服了这个障碍,但只是为了让你不会遇到它......这是出于“隐私”问题。)。在添加允许 getUserMedia 之前,我没有收到 ICE。现在我收到了两位候选人。一个具有专用 IPv4,另一个具有 IPv6。这足以让应用程序在同一台计算机或本地网络上正常工作。所以我对应用程序代码的其他部分非常有信心。我不确定我的问题是应用程序代码还是 CoTURN 服务器。

收到的 ICE 候选人示例:

{"candidate":{"candidate":"candidate:622522263 1 udp 2113937151 172.27.0.65 56182 typ host generation 0 ufrag r23H network-cost 50","sdpMid":"audio","sdpMLineIndex":0,"usernameFragment":"r23H"}}

我非常确定我的 RTCPeerConnection 的 RTCIceServer 字典符合以下标准:

  • https://w3c.github.io/webrtc-pc/webrtc.html https://w3c.github.io/webrtc-pc/webrtc.html
  • https://www.rfc-editor.org/rfc/rfc7064 https://www.rfc-editor.org/rfc/rfc7064
  • https://www.rfc-editor.org/rfc/rfc7065 https://www.rfc-editor.org/rfc/rfc7065

我尝试了多种参数变化:

// For Example:
var RPCconfig = {
    iceServers: [{ 
        urls: "turn:Example.live",
        username: "un",
        credential: "pw"
        }] 
     };

// Or:    
var RPCconfig = {
    iceServers: [{ 
        urls: "turns:Example.live",
        username: "un",
        credential: "pw",
        credentialType: "password"
        }, {
        urls: "stun:Example.live"
        }] 
    };

// And even more desperate attempts...
var RPCconfig = {
    iceServers: [{ 
        urls: "turn:Example.live?transport=tcp",
        username: "un",
        credential: "pw",
        credentialType: "password"
        }] 
};

以下是信令进程日志的示例,可让您了解正在发生的情况。这是来自接收方,即 Safari 11。另一个浏览器是 Chrome(比较 6 与 2 个 ICE 候选者)。状态变化是指oniceconnectionstatechange.

SDP Offer received. 
Sending signal SDP 
Sending signal IceCandidate
Sending signal IceCandidate 
ICE Candidate Received 
4:08:25 AM State Change -> checking 
ICE Candidate Received 
ICE Candidate Received 
ICE Candidate Received 
ICE Candidate Received 
ICE Candidate Received
4:08:40 AM State Change -> failed

据我所知,CoTURN 在接受每种可能的传输方法方面配置相当自由。它非常适合提供 ICE 候选者并作为其他浏览器的中继。

任何方向将不胜感激。即使它只是一个可以运行的 RTCIceServer 字典示例代码或可供尝试的经过验证的 TURN 服务器。


None

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

iOS 和 Safari 11 WebRTC 不收集 STUN/TURN Trickle ICE 候选者 的相关文章

随机推荐

  • 如何在android中垂直均匀分布按钮/布局?

    我有一个类似于计算器的布局 每行 4 个按钮 大约有 5 行 我使用以下方法创建了每一行LinearLayout 我已经成功地通过使用完全填充了每行的宽度android layout weight 1 在每个按钮中LinearLayout
  • Flexbox:重新排序和堆叠列

    我有三列 我想在特定的屏幕尺寸下交换它们的顺序 当前的顺序是两个 1 4 宽度的列 中间有 1 2 宽度 我想将两个1 4宽度的列变成1 2宽度 并在开始时将它们堆叠起来 我可以使用浮动来复制它 但无法找到使用弹性盒的方法 我正在努力让两个
  • 替换无序列表中的值(html)+ JQuery

    D1 nav d1 span text X1 会改变 span D1 span to span X1 span
  • 通过触摸停止和启动动画。目标C

    我制作了一个在屏幕上移动的动画 我的动画连续循环 如何在点击动画图像时停止动画 然后在松开触摸时让动画继续 我知道如何使用 TouchesMoved 来移动指定的按钮 如下所示 CGPoint point event allTouches
  • virtualenv激活后“python”仍然运行系统版本

    我使用以下命令安装了 Python 2 7 configure prefix usr local enable unicode ucs4 enable shared LDFLAGS Wl rpath usr local lib make m
  • Jupyter Lab 中的 pycwt 包出现 ModuleNotFoundError

    我有一个conda环境 我已经安装了wavelet包pycwt https pypi org project pycwt using conda install n myenv c conda forge pycwt 按照规定蟒蛇云 htt
  • ng2-文件上传访问控制来源问题

    我已经使用这个库进行 angular2 文件上传https github com valor software ng2 file upload https github com valor software ng2 file upload
  • 无法编译调用 tgkill 的程序

    我正在尝试编写一个使用 tgkill 向特定线程发送信号的程序 但是每当我用 gcc 编译它时 我都会收到有关 tgkill 未定义引用的错误 我尝试使用 lpthread 进行编译 但没有帮助 我用谷歌搜索了又搜索 但找不到任何答案 我如
  • .NET Excel 文件解析器

    因此 我工作的公司正在寻找一种方法来验证给定的 xls xlsx 文件是否有效 这意味着检查列 行和其他数据 他让我评估 GrapeCity Spread 和 SpreadsheetGear 但我想知道是否还有其他人可以查看其他外部工具的建
  • 如何解析flutter中的map Json列表?

    I have one Json structure with three maps one is list of products then total and tax I have to parse this json structure
  • 如何知道 npm `unzip` 模块何时完成解压文件?

    我正在使用unzip来自 npm 的模块用于提取 zip 存档的内容 我需要知道何时完成提取并且文件已完全写入磁盘 My code fs createReadStream master zip pipe unzip Extract path
  • C++ 中用于分离标头/源的模板专业化的稳健方法是什么

    在中等规模甚至大型复杂项目中 将模板声明和定义分开是有用的 以减少编译时间 然而 在复杂的代码中 程序员的小错误可能会导致不被注意的行为变化 例如调用通用版本而不是专门化版本 例子 由于错过了声明 模板专业化变得不可见 file A hpp
  • 如何将 Emacs 与 Python 结合使用

    我是 emacs 新手 我想使用 emacs 进行 python 开发 我使用的是 Ubuntu 9 10 我对让 emacs 与 python 一起工作感到沮丧 我使用 GNU Emacs 23 1 50 1 x86 64 pc linu
  • 以渐变方式绘制背景颜色

    此代码生成下面的第一个图 water height lt seq 0 5 1 y lt seq 0 1500 length out 6 df lt data frame water height y library ggplot2 ggpl
  • vb.net 中可以实现内联函数吗?

    问题在标题中 我看到的答案假设您正在谈论编译或 JIT 时内联 它们是完全正确的 然而 我听说过的 内联 一词的另一种用法是用于 lambda 表达式之类的东西 在 C 中 例如 public IEnumerable
  • 在 Android 上安装预构建的二进制文件:“未找到”

    我正在尝试在自定义 Android 映像中安装预构建的二进制文件 为此 我已将其复制到新目录中prebuilt android arm 与Android mk文件类似于此 LOCAL PATH call my dir include CLE
  • 进程地址空间与虚拟内存

    根据我阅读几篇文章的理解 我假设进程地址空间 PAS 和虚拟内存 VM 是相同的 难道是我的理解有问题 有人可以解释一下这一点并启发我吗 我很困惑 我知道进程地址空间与 RAM 或物理内存无关 但只是对 PAS 和 VM 感到困惑 Firs
  • 在 pandas 数据框中解析/分割 URL 的 pythonic 方法

    我有一个 df 它在标记为 url 的列中为不同的用户提供了数千个链接 如下所示 https www google com something https mail google com anohtersomething https cal
  • SWT 图像与字符串之间的转换

    我正在尝试将 SWT 图像转换为字符串 反之亦然 至字符串 Display display new Display final Image image new Image display c test png Looks good show
  • iOS 和 Safari 11 WebRTC 不收集 STUN/TURN Trickle ICE 候选者

    在 iOS 11 iPhone 5s 和 iPhone 7 或桌面上使用 Safari 11 时 我的 Web 应用程序无法通过 CoTURN 服务器收集 WebRTC 中继 ICE 候选项 Web 应用程序 建立单向音频 WebRTC 对