我使用socket.io和easyrtc进行p2p视频聊天。 https://github.com/merictaze/enlargify的工作示例,包含以下软件包版本
"express": "^4.15.2",
"easyrtc": "1.0.x", // easyrtc@1.0.15
"socket.io": "^1.4.5"
使用的easyrtc逻辑位于https://github.com/merictaze/enlargify/blob/master/public/resources/js/app.js
但是,如果我将easyrtc版本提升到1.1代码停止工作。我甚至尝试过测试分支。
"express": "^4.15.2",
"easyrtc": "priologic/easyrtc#beta",
"socket.io": "^1.4.5"
我知道这并没有多大帮助,所以在进一步调查中我发现它在这次通话中失败了
easyrtc.call(self.partnerId, successCB, failureCB, acceptedCB);
来自failureCB的错误代码是
MSG_REJECT_TARGET_EASYRTCID
在服务器端,日志显示
2017-12-07T07:02:40.477Z - debug - EasyRTC: [enlargify_app][fNhseVCWzi8XXhn5] EasyRTC command received with msgType [offer] undefined
2017-12-07T07:02:40.478Z - warning - EasyRTC: Attempt to request non-existent connection key: '0xv7UpIAlVeAzEedAAAA' undefined
2017-12-07T07:02:40.479Z - warning - EasyRTC: [enlargify_app][fNhseVCWzi8XXhn5] Could not send WebRTC signal to client [0xv7UpIAlVeAzEedAAAA]. They may no longer be online. undefined
然而,在package.json中恢复easyrtc版本的工作原理与此处的演示相同http://enlargify.herokuapp.com/
我想更新easyrtc版本,因为beta分支中的safari支持。我发现演示工作顺利。
PS。我确实更新了socket.io版本并更新了已弃用的调用,例如
partnerSocket = io.sockets.socket(socket.partnerId);
partnerSocket.emit("disconnect_partner", socket.id);
到
io.to(socket.partnerId).emit("disconnect_partner", socket.id);
进一步研究表明,客户端生成的socket.id与服务器端的socket.id不同。这就是两个同伴无法连接的原因。
我知道如何获得 easyrtc.connect 的成功功能来返回正确的套接字ID?
答案 0 :(得分:0)
在这里回答我自己的问题,如果其他人偶然发现,他们不会像我一样浪费时间。
客户端和服务器上Ids差异的原因是因为在easyrtc@1.0.15版本之前,easyrtc依赖于SocketIO的ID并将其用作EASYRTCID。这意味着socket.id和easyrtcid都可以互换引用。这就是为什么它适用于旧版本。
正如https://github.com/priologic/easyrtc/issues/185所解释的那样,他们改变了功能并根据新模式制作了EASYRTCID。由于信令服务器(socketIO)将向socket.id发出,而easyrtc在启动调用时将使用easyrtcid。因此,需要业务逻辑来通过套接字在对等体之间传递easyrtcids以便进行easryrtc调用。
除此之外,我们还需要告诉easyrtc对象使用信令服务器的套接字实例。我按照这个例子https://demo.easyrtc.com/demos/demo_instant_messaging_selfconnect.html