可以在同一个客户端和 window 上的两个应用程序之间建立 WebRTC 连接吗?
Can a WebRTC connection be established between two apps on the same client and window?
尽管 WebRTC 用于电话会议,但 capture a MediaStream
and use that as a source for an RTCPeerConnection
也是可能的。碰巧的是,这可能是我面临的问题的解决方案:在不支持它们的 WebGL 应用程序中显示 live-stream。
(想法是使用像 HLS.js 这样的库来处理 live-stream 的组装和重新混合,然后将该视频流式传输到我的 WebGL 应用程序中。该应用程序内置于游戏引擎 Unity ,which has introduced a package for WebRTC,所以我可以显示它。)
根据docs,服务器需要充当客户端之间的中间人。然而,据我了解,这本质上是为了帮助他们找到彼此并同意通过 P2P 网络进行连接。由于这两个应用程序——WebGL 应用程序和一个 Node app/JS 脚本——存在于同一个客户端,甚至是同一个浏览器 window,也许我可以省略中间人并直接连接?
不幸的是,我无法找到任何关于此方法的信息——可能是因为它太不寻常了 use-case。是否可以?如果可以,是否可行,如何实现?
如果我没有正确理解你的问题,你想在没有实际信令服务器的情况下实现 WebRTC 连接。
WebRTC 本身并不关心您如何向它提供 Offer、Answer 和 Ice Candidates,但我看不到不使用信令服务器就可以交换此信息的“正常”方式。
这可能是可能的...信令服务器充当中间人,因此您可以交换 SDP 和 IceCandidates。如果您的两个对等连接都在同一个应用程序中(javascript?)您应该能够直接传递这些对象。
例如
conn1 = new RTCPeerConnection();
conn2 = new RTCPeerConnection();
conn1.onicecandidate = (event) => {
if (event.candidate) {
conn2.addIceCandidate(event.candidate);
}
}
conn2.onicecandidate = (event) => {
if (event.candidate) {
conn1.addIceCandidate(event.candidate);
}
}
conn1.createOffer()
.then(offer => conn1.setLocalDescription(offer))
.then(() => conn2.setRemoteDescription(conn1.localDescription))
.then(() => conn2.createAnswer())
.then(answer => conn2.setLocalDescription(answer))
.then(() => conn1.setRemoteDescription(conn2.localDescription))
.catch(handleCreateDescriptionError);
编辑:我刚读到它们在不同的应用程序中。您将不得不寻找另一种方法在应用程序之间传递此信息,但只要您可以交换此数据,连接就应该有效。
尽管 WebRTC 用于电话会议,但 capture a MediaStream
and use that as a source for an RTCPeerConnection
也是可能的。碰巧的是,这可能是我面临的问题的解决方案:在不支持它们的 WebGL 应用程序中显示 live-stream。
(想法是使用像 HLS.js 这样的库来处理 live-stream 的组装和重新混合,然后将该视频流式传输到我的 WebGL 应用程序中。该应用程序内置于游戏引擎 Unity ,which has introduced a package for WebRTC,所以我可以显示它。)
根据docs,服务器需要充当客户端之间的中间人。然而,据我了解,这本质上是为了帮助他们找到彼此并同意通过 P2P 网络进行连接。由于这两个应用程序——WebGL 应用程序和一个 Node app/JS 脚本——存在于同一个客户端,甚至是同一个浏览器 window,也许我可以省略中间人并直接连接?
不幸的是,我无法找到任何关于此方法的信息——可能是因为它太不寻常了 use-case。是否可以?如果可以,是否可行,如何实现?
如果我没有正确理解你的问题,你想在没有实际信令服务器的情况下实现 WebRTC 连接。
WebRTC 本身并不关心您如何向它提供 Offer、Answer 和 Ice Candidates,但我看不到不使用信令服务器就可以交换此信息的“正常”方式。
这可能是可能的...信令服务器充当中间人,因此您可以交换 SDP 和 IceCandidates。如果您的两个对等连接都在同一个应用程序中(javascript?)您应该能够直接传递这些对象。
例如
conn1 = new RTCPeerConnection();
conn2 = new RTCPeerConnection();
conn1.onicecandidate = (event) => {
if (event.candidate) {
conn2.addIceCandidate(event.candidate);
}
}
conn2.onicecandidate = (event) => {
if (event.candidate) {
conn1.addIceCandidate(event.candidate);
}
}
conn1.createOffer()
.then(offer => conn1.setLocalDescription(offer))
.then(() => conn2.setRemoteDescription(conn1.localDescription))
.then(() => conn2.createAnswer())
.then(answer => conn2.setLocalDescription(answer))
.then(() => conn1.setRemoteDescription(conn2.localDescription))
.catch(handleCreateDescriptionError);
编辑:我刚读到它们在不同的应用程序中。您将不得不寻找另一种方法在应用程序之间传递此信息,但只要您可以交换此数据,连接就应该有效。