- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我了解 NAT 打洞、ICE 和 SIP VOIP 调用的许多细节。我已经在这些主题上回答了很多关于 SO 的问题。现在我有一个问题。
我试图了解在调用建立后记录为 SIP+ICE 的 RE-INVITE 消息的需求。
假设 VOIP 设备的拓扑结构通过 SIP 发出信号并使用 ICE(带有 STUN/TURN)来建立媒体连接。执行 ICE 连接检查后,两个端点都应该确定最佳地址候选配对(IP、端口),并且应该准备好双向流媒体。
但是我在 SIP 方面的经验和大量文档表明,在被叫方发送 200 OK 消息以表明他处于已应答状态后,调用者应该发送带有 SDP 的 RE-INVITE,其中包含通过连接检查选择的特定地址候选者.
一些描述使用 ICE 重新邀请的链接是 here和 here (第 8 步)。罗森伯格的 tutorial (第 30 页)讨论了 RE-INVITE “确保中间盒具有正确的媒体地址”。我不确定为什么这很重要。
收到 RE-INVITE 后,被调用者是否需要重新配置其 ICE 堆栈以根据收到的新 SDP 切换套接字或地址?还是 RE-INVITE 只是正式确认调用已建立的协议(protocol)形式?如果跳过 RE-INVITE 步骤,双方都开始流媒体,会出现什么问题?
我问的原因是因为我正在探索在不是 SIP 的信令服务上使用 ICE。我试图弄清楚是否需要模拟 RE-INVITE。
最佳答案
可能对 ICE 协商结果感兴趣的中间盒的一个示例是带宽管理器。
想象一下企业部署,端点位于企业防火墙内,其他端点在 Internet 上漫游,或位于私有(private)家庭防火墙之后。该部署还包括一个可公开访问的 TURN 服务器。然后让我们想象一下公司防火墙内的一个端点进行调用。如果目的地碰巧在同一网络上可达,调用将通过主机到主机,并且不会使用 TURN 服务器(即绑定(bind)将被取消分配)。这是一个本地网络,不需要施加带宽限制。另一方面,如果调用发送到漫游端点,则 TURN 服务器将参与其中,数据将通过公司防火墙,通过可能是带宽有限的上行链路。我们可以很好地想象一些想要限制调用带宽的策略。一种方法是让带宽管理器保留在信令路径中(使用 SIP 记录路由)并查看任何通过的 INVITE 的 SDP,根据媒体地址重写带宽值。
我相信总体意图是,那种不知道 ICE 的遗留设备应该继续在引入 ICE 端点的混合环境中工作。为了保持这种向后兼容性,ICE 应该只引入新的处理(STUN 检查等),但从非 ICE 感知元素的角度来看,它不应该删除任何现有规则(仍然需要重新邀请来更改媒体流的目的地)。
关于p2p - 对于 ICE,SIP RE-INVITE 的需求是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15910014/
根据文档,“|”可用于创建匹配任一由“|”分隔的模式的正则表达式。 我正在尝试使用以下内容来查看 moves 是否包含与“UP”“DOWN”“LEFT”“RIGHT”之一匹配的字符串: moves =
这个问题在这里已经有了答案: What is the difference between re.search and re.match? (8 个回答) 1年前关闭。 来自 regex docs它说
谁能告诉我是否可以组合像 re.IGNORECASE 这样的标志, re.MULTILINE和 re.DOTALL正则表达式匹配? r = re.compile(regex, re.IGNORECAS
这个问题在这里已经有了答案: Python re.sub with a flag does not replace all occurrences (3 个答案) 关闭 6 年前。 为什么这符合预期
提前致谢。我的问题是: 我有一段 Python 代码,我在其中尝试使用“os.walk,re and re.findall ip”来尝试在多个文件中查找所有 ip 地址,例如: file1:192.1
在演示 Python 的正则表达式功能时,我编写了一个小程序来比较 re.search()、re.findall() 和 re 的返回值.finditer()。我知道 re.search() 每行只会
我有一台运行 Lion 和 Python 2.7.1 的 Mac。我注意到 re 模块中有一些非常奇怪的东西。如果我运行以下行: print re.split(r'\s*,\s*', 'a, b,\n
在 python 中,re.search() 检查字符串中任何位置的匹配项(这是 Perl 默认执行的操作)。 那么,为什么我们不像在 Ex(2) 中那样在 Ex(1) 中得到 'ABBbbb' 的输
我正在尝试从存储在光盘上的 HTML 文档中创建单词列表。当我尝试拆分单词并将它们添加到我的单词向量中时,我最终陷入了困惑。 def get_word_vector(self): line =
所以我尝试只打印月份,当我使用时: regex = r'([a-z]+) \d+' re.findall(regex, 'june 15') 它打印:六月但是当我尝试对这样的列表执行相同操作时: re
我正在学习 Python 的正则表达式。下面有两个略有不同的 re.search() 函数。唯一的区别是我在'}'之前添加了一个空格。任何人都可以解释导致结果差异的原因吗?谢谢! 我的代码: impo
我被难住了。我正在编写 Python 3.6.2,使用 PyCharm 作为我的 IDE。以下脚本片段说明了我的问题: def dosubst(m): return m.group() + "
这个问题在这里已经有了答案: Python re.search (2 个答案) 关闭 9 年前。 我正在尝试从 Hackerrank 的问题中解决这个问题。这是一个机器学习问题。最初,我试图从语料库
请解释一下为什么使用 re.find 和 re.sub 会得到不同的结果 我解析的字符串: GRANT USAGE ON *.* TO 'testuser'@'10.10.10.10' IDENTIF
为什么re.match返回的是None对象,而类似的re.findall返回的是非空结果? 我正在解析电子邮件主题。有问题的是 subject = "=?UTF-8?B?0JLQsNGI0LUg0YH
问题第 1 部分 我得到了这个文件 f1: George Washington Joe Taylor 我想重新编译它,它看起来像这样 f1:(带空格) George Washington Joe
python正则表达式模块简介 Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。Python 1.5之前版本则是通过 regex 模块提供 Emacs 风格的
我的字符串看起来像“Billboard Bill SpA”。我想要一个删除 SpA 的正则表达式,但前提是它前面有一个大写单词。我使用的正则表达式是“[A-Z][a-z]*\s(SpA)”。如果我使用
我有一个 str,我想获取单引号内的子字符串 ('): line = "This is a 'car' which has a 'person' in it!" 所以我用了: name = re.fi
这个问题在这里已经有了答案: Difference between regular expression modifiers (or flags) 'm' and 's'? (3 个答案) Pyth
我是一名优秀的程序员,十分优秀!