我读到 RTCPeerConnection 不关心选择交换信号的传输机制(websocket、google channel 等)。您是否认为有可能收集这些信号,使用 JSON 对其进行编码,并要求用户使用外部机制(聊天、电子邮件等)将它们发送给其他对等方,以完全绕过对远程的需求服务器?
我做了一点 POC,这似乎只有在两个对等点都在同一台机器上时才有效;任何线索?
谢谢!
我读到 RTCPeerConnection 不关心选择交换信号的传输机制(websocket、google channel 等)。您是否认为有可能收集这些信号,使用 JSON 对其进行编码,并要求用户使用外部机制(聊天、电子邮件等)将它们发送给其他对等方,以完全绕过对远程的需求服务器?
我做了一点 POC,这似乎只有在两个对等点都在同一台机器上时才有效;任何线索?
谢谢!
是的。只要每个客户收到另一个客户的 SDP(包括 ICE 候选人),您就应该能够建立一个PeerConnection
. WebRTC 与应用程序开发人员采用的信令机制分离。但是必须传输这些信号,以便每个客户端都知道应该注意哪个 IP-Port 组合。
现在要求用户手动交换和处理这些信号可能会变成一项乏味的任务。我建议使用Socket.io设置一个简单的服务器,它可以让您轻松地中继信号。您也可以随时使用 AJAX 轮询。
是的,您可以通过电子邮件或任何其他传输方式发送。我认为用户的结果不会是最好的,但这是一种方法。
我会向您解释,收到 SDP 报价的用户必须在浏览器中输入它,获得 SDP 答案,然后将其发送回发起请求的用户。但我假设当你说它在本地工作时,你正在做所有这些。
您也必须等待 ICE 候选人,因为您只发送一次报价和答复,以便允许同行连接。
是的。一些兴趣点是 setLocalDescription()、setRemoteDescription()、createOffer() 和 createAnswer()。
这是一个概念验证: https ://github.com/cjb/serverless-webrtc/
现场演示: http ://cjb.github.io/serverless-webrtc/serverless-webrtc.html
不 - 据我了解,您不能简单地通过电子邮件发送会话描述。
ICE 建立了对等点之间的最佳路由,我认为 ICE 候选者的数量可能会根据双方客户当前的网络情况而有所不同。
如果收到候选冰和会话描述,然后客户端移动物理位置(例如,加入不同的 wifi 网络),它将使冰候选无用 - 意味着客户端无法连接。
我不是专家,所以很容易出错。该答案仅来自我在使用 webrtc 为 2 个客户端设置自己的信号系统时获得的 webrtc 知识......
是的你可以。SDP 只是一堆文本,所以你可以选择任何你想要的媒介。SDP 的一个重要部分是 ICE 候选人,我建议将其作为 SDP 的一部分;所以它都可以作为一个大字符串通过您选择的介质(ajax、websockets 等)发送。
请注意,您通过调用 createOffer 获得的第一个 SDP 不会包含 ICE 候选者。您必须等到“onicecandidate”回调至少被调用一次才能获得一些 ICE 候选人。然后你在你的对等连接上再次调用 createOffer,它将包含所有信息(ICE 候选人加上 SDP 的其余部分)。
另请注意,onicecandidate 将根据需要被调用多次,直到找出所有本地 ICE 候选人,因此您可以等待所有这些候选人到那时生成完整的 SDP 报价以发送到另一方。
免责声明:我在 Pusher 工作。
是的,您可以通过任何交通工具发送它。然而,如今 websockets 是一个不错的选择,因为大多数浏览器都支持它。
正如@Vishnu 提到的,您可以设置一个 socket.io 服务器,或者如果您不想经历设置的麻烦,您可以使用 Pubnub 或Pusher等托管解决方案。如果您有兴趣,我使用 Pusher 和 Webosckets (+fallbacks)编写了一个webRTC 信令教程。