我使用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与服务器上的不同。这就是为什么两个对等点无法连接的原因。
知道如何获得easyrtc.connect的成功函数来返回正确的socketID吗?
发布于 2017-12-25 13:43:30
在这里回答我自己的问题,所以如果别人发现了这个问题,他们不会像我那样浪费时间。
客户机和服务器上ID差异的原因是,在easyrtc@1.0.15版本之前,easyrtc依赖SocketIO的ID并将其用作EASYRTCID。这意味着可以互换地引用socket.id和easyrtcid。这就是为什么它在旧版本中有效的原因。
正如在https://github.com/priologic/easyrtc/issues/185上解释的那样,他们改变了功能,并基于新的模式制作了EASYRTCID。因为信令服务器(socketIO)将发出到socket.id,而easyrtc在发起调用时将使用easyrtcid。因此,需要业务逻辑通过套接字在对等点之间传递easyrtcid,以便进行easryrtc调用。
此外,我们还需要告诉easyrtc对象使用信令服务器的套接字实例。我遵循了这个例子,selfconnect.html
https://stackoverflow.com/questions/47949449
复制相似问题