手动交换WebRTC RTCPeerConnection信令

3
我看到RTCPeerConnection并不关心选择哪种传输机制来交换信号(websocket、google channel等)。你认为是否可能收集这些信号,用JSON编码,并要求用户使用外部机制(聊天、电子邮件等)将它们发送给另一个对等方,以完全绕过需要远程服务器的需求?
我做了一个小的POC,似乎只有当两个对等方在同一台计算机上时才能正常工作;有什么线索吗?
谢谢!

1
在评论中,您说您会进行更多的测试并分享结果。您有任何成功吗?谢谢。 - Majid Fouladpour
6个回答

4
是的。只要每个客户端都收到了另一个客户端的SDP(其中包括ICE候选项),您就应该能够建立PeerConnection。WebRTC与应用程序开发人员采用的信令机制分离。但是,必须传输这些信号,以便每个客户端都知道应该关注哪个IP-Port组合。
现在请求用户手动交换和处理这些信号可能会变得繁琐。我建议使用Socket.io设置一个简单的服务器,让您轻松中继信号。您还可以始终使用AJAX轮询。

2

是的,您可以通过电子邮件或任何其他方式发送它。我认为用户的结果可能不是最好的,但这是一种方法。

我想向您解释一下,接收SDP Offer的用户必须在浏览器中输入它,获取SDP Answer并将其发送回启动请求的用户。但我假设当您说本地工作时,您正在执行所有操作。

您必须等待ICE候选者,因为您仅发送一次提供和答案,以允许对等方连接。


1
谢谢!我可能弄错了SDP和ICE候选项的顺序 :) 我会进行更多测试并告诉你! - Sandro Paganotti

1

很棒的演示,但在Firefox中不再起作用:TypeError: Not enough arguments to mozRTCPeerConnection.setLocalDescription. - 缺少错误回调。 - jib

1
是的,你可以。SDP只是一堆文本,所以你可以选择任何媒介。 SDP的一个重要部分是ICE候选项,我建议将其作为SDP的一部分包含在内; 因此,您可以选择任何媒介(ajax,websockets等)发送一个大字符串。
请注意,从调用createOffer获取的第一个SDP不会包含ICE候选项。您必须等待至少一次“onicecandidate”回调被调用才能获得一些ICE候选项。然后在对等连接上再次调用createOffer,它将具有所有信息(ICE候选项加上其他SDP)。
还要注意,onicecandidate将根据需要被调用多次,直到找出所有本地ICE候选项,因此,您可以等待所有候选项完成,然后生成完整的SDP提供给另一侧。

1

免责声明:我在Pusher工作。

是的,您可以通过任何传输方式发送它。然而,现在WebSockets是一个相当不错的选择,因为大多数浏览器都支持它

正如@Vishnu所提到的,您可以设置一个socket.io服务器,或者如果您不想经过设置的麻烦,您可以使用托管解决方案,如Pubnub或Pusher。如果您有兴趣,我写了一个使用Pusher和Webosckets(+回退)的WebRTC信令教程。

http://pusher.com/tutorials/webrtc_chat


0

不行 - 据我所知,你不能简单地通过电子邮件发送会话描述。

ICE在对等方之间建立最佳路由,我认为ICE候选者的数量可能根据客户端当前的网络情况而异。

如果收到了ICE候选者和会话描述,然后客户端移动物理位置(例如加入不同的WiFi网络),那么ICE候选者将变得无用 - 这意味着客户端无法连接。

我不是专家,所以可能错了。这个答案只是基于我使用webrtc为2个客户端设置自己的信令系统时所获得的webrtc知识...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接