So I am trying to develop a web application that has the capability to make video calls between users of the web application. Theoretically, Caller A can look in a directory in the web application, see that Caller B is online and make a video call. My question is how do you get the IP and port number of Caller B? I realize that this information needs to be exchanged via signaling but how does Caller A ever get their information to Caller B if they don't know what Caller B's IP or port number are?
2 回答
对等点通过 ICE 协议相互发现。这是正常 WebRTC 连接建立的一部分。ICE 有方法来发现 IP 和端口等必要信息。
您需要担心的是让ICE 候选人从一个同行到另一个同行。您可以通过您的信令服务器执行此操作。同伴 A 正在发现 ICE 候选者,并将在RTCPeerConnection
对象上向您展示它们;您将这些候选人发送到您的服务器,服务器将它们发送到对等 B,它们必须被合并到对等 B 中RTCPeerConnection
;整个事情也是相反的。一旦交换了足够多的 ICE 候选并发现了匹配的可能性,两个对等点将建立直接连接。
信令服务器的实现取决于您和您的特定需求。
我同意上面的评论,即 ICE 在这里交换媒体流至关重要,但我假设您是从信号的角度提出这个问题。
一种解决方案是基于 MQTT 构建的简单呈现功能和称为保留消息的功能。基本上,每个客户端都会以订阅者获得的保留消息的形式将文档发布到 MQTT 主题。保留的消息会一直保留在代理上,直到它们被客户端清除或客户端与代理断开连接(使用 MQTT Last Will 和遗嘱消息)。保留的消息包含可用于连接到其他对等点的信息(例如对等点主题名称)。您可以在此处查看它的演示:https ://angular-rtcomm.wasdev.developer.ibm.com 。
这都是在开源中实现的。如果您想快速开始演示,您可以使用 Node.js 与 Mosca MQTT 代理和 Rtcomm 开源来完成。如果您熟悉 Node.js,则需要大约 20 分钟来设置。说明可以在上面的链接中找到。