0

我正在使用带有 easyrtc 的 socket.io 进行 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,代码将停止工作。我什至尝试过 beta 分支。

"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/

由于 beta 分支中的 safari 支持,我想更新 easyrtc 版本。我发现演示工作顺利。

附言。我确实更新了 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吗?

4

1 回答 1

0

在这里回答我自己的问题,所以如果其他人偶然发现这个问题,他们不会像我一样浪费时间。

客户端和服务端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。因此需要业务逻辑通过套接字在对等方之间传递easyrtcids,以便进行easryrtc调用。

除了上面我们还需要告诉easyrtc对象使用信令服务器的socket实例。我按照这个例子https://demo.easyrtc.com/demos/demo_instant_messaging_selfconnect.html

于 2017-12-25T13:43:30.540 回答