Chrome 基于 TCP 的 WebRTC
Chrome WebRTC over TCP
我正在尝试通过 TCP 使用 WebRTC 媒体,中间有一个网关,但我在 ICE 连接阶段遇到了一些有趣的问题。在进一步推进之前,重要的是要知道我有相同的 UDP 设置并且一切正常。
在网关中,我们修改远程应答 SDP 以包含单个 TCP 候选(媒体端口也修改为包含相同端口):
a=candidate:1 1 tcp 1 <gw_ip> <gw_port> typ host tcptype passive generation 0
另外,我将属性设置发送为被动:
a=setup:passive
在 Chrome 上应用远程描述后几秒钟,我在网关上收到了一个 STUN BIND 请求,我正在用绑定成功响应进行答复(我已经检查了事务 ID 和消息完整性他们看起来很好)。
在此之后 chrome 简单不再继续 ICE 检查(也不是 DTLS 消息)。我启用了 chrome 日志以查看是否发生了某些错误,并且我发现了一个有趣的输出:
"Ignoring STUN binding response message on shared socket"
我查看了 Chromium 源代码,似乎显示了这一点,因为 chrome 使用的是共享套接字,但我不明白这是什么原因。
有什么想法吗?谢谢!
经过深入调查,我发现 TCP 流在网关端没有被正确解析。
具体来说,此流使用了未应用于 inbound/outbound 数据的长度框架机制,因此在流程管道上引发了几个问题。
有关成帧机制的更多信息,请参阅 rfc5389:
https://www.rfc-editor.org/rfc/rfc5389
我正在尝试通过 TCP 使用 WebRTC 媒体,中间有一个网关,但我在 ICE 连接阶段遇到了一些有趣的问题。在进一步推进之前,重要的是要知道我有相同的 UDP 设置并且一切正常。
在网关中,我们修改远程应答 SDP 以包含单个 TCP 候选(媒体端口也修改为包含相同端口):
a=candidate:1 1 tcp 1 <gw_ip> <gw_port> typ host tcptype passive generation 0
另外,我将属性设置发送为被动:
a=setup:passive
在 Chrome 上应用远程描述后几秒钟,我在网关上收到了一个 STUN BIND 请求,我正在用绑定成功响应进行答复(我已经检查了事务 ID 和消息完整性他们看起来很好)。
在此之后 chrome 简单不再继续 ICE 检查(也不是 DTLS 消息)。我启用了 chrome 日志以查看是否发生了某些错误,并且我发现了一个有趣的输出:
"Ignoring STUN binding response message on shared socket"
我查看了 Chromium 源代码,似乎显示了这一点,因为 chrome 使用的是共享套接字,但我不明白这是什么原因。
有什么想法吗?谢谢!
经过深入调查,我发现 TCP 流在网关端没有被正确解析。
具体来说,此流使用了未应用于 inbound/outbound 数据的长度框架机制,因此在流程管道上引发了几个问题。
有关成帧机制的更多信息,请参阅 rfc5389: https://www.rfc-editor.org/rfc/rfc5389