如何将 IceCandidates 嵌入到 SDP 中?

How to embedded IceCandidates to SDP?

我们实现的信令机制需要在sdp本身发送icecandidates。
你知道如何在 sdp 中嵌入 icecandidates 吗?
另外,如果icecandidates嵌入在sdp中,那么PeerConnection将如何发起p-2-p连接?
或者PeerConnection是否可以在设置远程sdp之后立即发起p2p连接或者必须做其他事情?

此外,您能否建议我们如何使用 webrtc 在同一 wifi 网络中的 2 台设备之间进行视频通信(不使用 STUN/TURN)?
我尝试将 iceservers 设置为空,但应用程序无法运行!
我已经从日志中为两个设备收集了生成的 sdp。
我已经为两个同行生成了 ice 候选人。我将 sdp 和 icecandidates 合并为一个 sdp。有了这个,我将 iceservers 设置为 RTCConfiguration 为 NULL。但是现在该应用程序无法运行!

我想知道的是,如果我们有一个嵌入icecandidates的SDP,我们如何发起p2p连接?设置Remote IceCandidate或设置RemoteDescription时是否发起p2p连接?

谢谢!

ICE 候选人包含在 SDP offer/answer 中。所以只要等到 ICE 收集过程完成,然后发送 SDP offer/answer.

我不确定您是否可以在没有 STUN/TURN 服务器的情况下使用 WebRTC,但是您可以使用您的服务器或 public 服务器。似乎在本地环境中,没有 STUN/TURN 服务器一切正常 - 只需将一个空数组传递给 iceServers.

最后一个问题 - 视情况而定。如果 TrickleICE is implemented (and in Chrome and Firefox is) the connection is initiated when the first good ICE candidate is found. And you can set the description before that. Otherwise, you need to wait until the ICE gathering 过程完成,然后发送 offer/answer 并将其设置在另一个对等点上作为远程描述。然后会发起连接。

我无法将其放入评论中,因此我将 post 作为答案。

我们 运行 在没有配置 STUN/TURN 服务器的情况下经常测试本地 WebRTC,它工作正常。它只会限制您通过 NAT 防火墙进行连接的能力。不能保证它会在您的环境中连接,但它不应该崩溃。还没有用 Android 尝试过,所以没有评论。

至于禁用 Trickle ICE,我们 运行 遇到了一些问题(主要是 Chrome)。在发送 OFFER 或 ANSWER 之前,您基本上必须等到收到 NULL ICE 候选人。这就是 WebRTC 引擎告诉应用程序 ICE 收集过程已经完成的方式。当我们配置为使用 google STUN/TURN 服务器时,在最后一个可行的候选事件发生和 NULL 候选事件发生之间会有很长的延迟(> 10 秒)。我还看到过从未收到 NULL 候选事件并且调用只是超时的情况。

我们的计划是添加一个计时器,以便在禁用 Trickle ICE 几秒钟后中断 ICE 收集过程。我还没有尝试过,但我看不出为什么它不起作用并且应该更有用。根据我的经验,所有候选人都会在一两秒内收集到。