【发布时间】:2017-05-16 04:09:33
【问题描述】:
我正在尝试使用WebRTC,只是在data channel 上建立聊天。我有一个问题,当两个对等点都连接在同一个本地网络上时,聊天可以正常工作。同行尝试从不同的网络连接(我一直在用两台计算机进行测试,其中一台连接到我的家庭 Internet 网络,另一台通过我的手机 wifi 路由器连接)。
聊天的行为似乎很好,offer 和 answer 是通过信令服务器正确发送的。并且使用相同的信令服务器,ice candidate 也会被发送。
peer.onicecandidate = (iceEvent: RTCPeerConnectionIceEvent) => {
if (iceEvent.candidate) {
const message: ConnectionEvent = {
type: ConnectionEventType.CANDIDATE,
caller: null,
callee: event.caller,
room: event.room,
data: iceEvent.candidate,
};
ws.send(message);
} else {
// All ICE candidates have been sent
}
};
所以创建offer 的对等方只发送一个 ice candidate 我认为这是问题因为创建answer 的对等方发送两个 ice candidates .
这里有什么问题?我应该什么时候打电话给addIceCandidate?
这是 console log 的示例,带有 sent 和 received 数据
同行提供连接:
sent: CONNECT Object {type: "CONNECT", caller: Object, callee: null, 房间:对象,数据:空}
收到:CONNECT Object {类型:“CONNECT”,调用者:对象,被调用者: 空,房间:对象,数据:空}
发送:OFFER Object {type:“OFFER”,调用者:对象,被调用者:对象, 房间:对象,数据:对象}
发送:候选对象{类型:“候选”,调用者:对象,被调用者: 对象,房间:对象,数据:对象}
发送:候选对象{类型:“候选”,调用者:对象,被调用者: 对象,房间:对象,数据:对象}
收到:ANSWER Object {类型:“ANSWER”,调用者:对象,被调用者: 对象,房间:对象,数据:对象}
收到:候选对象{类型:“候选”,调用者:对象,被调用者: 对象,房间:对象,数据:对象}
同行创建答案:
sent: CONNECT Object {type: "CONNECT", caller: Object, callee: null, 房间:对象,数据:空}
收到:OFFER Object {类型:“OFFER”,调用者:对象,被调用者:对象, 房间:对象,数据:对象}
收到:候选对象{类型:“候选”,调用者:对象,被调用者: 对象,房间:对象,数据:对象}
收到:候选对象{类型:“候选”,调用者:对象,被调用者: 对象,房间:对象,数据:对象}
sent: ANSWER Object {type: "ANSWER", caller: Object, callee: Object, 房间:对象,数据:对象}
发送:候选对象{类型:“候选”,调用者:对象,被调用者: 对象,房间:对象,数据:对象}
【问题讨论】:
-
如果在注销对象之前对它们进行字符串化,可能会更容易找到错误的线索,例如
console.log("sent:", JSON.stringify(data))
标签: javascript webrtc